Автор Тема: Тег canonical  (Прочитано 202 раз)

23 Августа 2016, 13:00:13
  • Фрилансер
  • *
  • Сообщений: 167
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
собственно говоря, как расставить эти теги?
их суть сводится к тому, чтобы бот считывал только 1 версию страницы, которую мы указываем в этом теге, т.е. "оригинал".
стоит шаблон leo_exist, все скрипты подключаются в header.tpl и footer.tpl, окей, а как я могу указать каноникалы, если контент может быть разный? ну, т.е. он динамический.
пагинация и все остальные страницы магазина... а хедер и футер ведь статичны в какой-то мере.
нужно как-то в хедере определить текущую страницу и прописать нужные каноникал, но в файлах *.tpl php-скрипт не выполняется...
хелпгайз
23 Августа 2016, 13:41:37
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13121
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Используйте модуль seoexpert, в нем можно задать разные шаблоны формирования мета тегов.
23 Августа 2016, 13:53:05
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 167
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
а бесплатные варианты есть?
23 Августа 2016, 15:36:01
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 2156
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Бесплатный закрывать пагинацию в htaccess. На форуме есть информация как сделать.
25 Августа 2016, 00:19:40
Ответ #4
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте! хочу поднять один вопрос на обсуждение касательно формирования канонического адреса для карточки товара, при этом когда карточка товара доступна сразу по нескольким адресам.

к примеру карточка товара доступна по адресам:
http://site.ru/piony/756-buket-binelli.htm
http://site.ru/756-buket-binelli.html

Часто встречается примерно следующее решение проблемы (для категорий и других страниц в том числе карточки товара):
{if $page_name == 'index' or $page_name == 'search'}
<link rel="canonical" href="{$base_dir}" />
{elseif $page_name == 'category' or $page_name == 'best-sales' or $page_name == 'cart' or $page_name == 'discount' or $page_name == 'manufacturer' or $page_name == 'new-products' or $page_name == 'prices-drop'}
<link rel="canonical" href="{$base_dir}{$request_uri|substr:1|regex_replace:'/\/(.*)/':''|regex_replace:'/\?(.*)/':''}" />
{else}
<link rel="canonical" href="{$base_dir}{$request_uri|substr:1}" />
{/if}

или вот такой вариант:

{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />
{elseif $page_name == 'manufacturer' && isset($manufacturer->id)}
<link rel="canonical" href="{$link->getManufacturerLink($manufacturer->id)}" />
{elseif $page_name == 'supplier' && isset($supplier->id)}
<link rel="canonical" href="{$link->getSupplierLink($supplier->id)}" />
{elseif $page_name == 'category' && isset($category->id)}
<link rel="canonical" href="{$link->getCategoryLink($category->id)}" />
{elseif in_array($page_name,$pages_array)}
<link rel="canonical" href="{$link->getPageLink($page_name)}" />
{elseif $page_name == 'cms' && isset($cms->id)}
<link rel="canonical" href="{$link->getCmsLink($cms->id)}" />
{else}
{assign var=amn value=explode("-",$page_name)}
{if strpos($page_name,"module-") !== false && count($amn) == 3}
<link rel="canonical" href="{rtrim($base_dir,'/')}{$request_uri|regex_replace:'/\?(.*)/':''|replace:'index.html':''}" />
{/if}
{/if}

однако при указанном выше условии (когда карточка товара доступна по нескольким адресам) такое решение работает не верно.

и при таких решениях канонический адрес для страницы
http://site.ru/piony/756-buket-binelli.htm будет
<link rel="canonical" href="http://site.ru/piony/756-buket-binelli.html" />
а для страницы
http://site.ru/756-buket-binelli.html будет
<link rel="canonical" href="http://site.ru/756-buket-binelli.html" />

что не решает первоначальную задачу для определения канонической страницы.
Соответственно необходим код, который будет в данном случае принудительно указывать единственный канонический адрес (либо через категорию, либо прямой на карточку товара).

Есть кто решил подобную проблему?
25 Августа 2016, 09:42:20
Ответ #5
  • Фрилансер
  • *
  • Сообщений: 167
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
оформляйте код тегом code, и насчет моей темы таки:
я придумал (и выше сйечас увидел, что так и делают) просто привязывать значение текущего урла к переменной  смарти, после чего в хедер.тпл подключать по некоторым критериям. собсно, вопрос, а где происходит подвязка переменных для шаблона хедер.тпл? чойта я ничего не нашел.
если накладно, то готов вставить костыль - напхпшить прямо там, однако не получилось включить выполнение пхп-скриптов в файлах шаблонов.
хелпмигайз
25 Августа 2016, 10:30:39
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 2156
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />
Так вот этот код и определит один url страницы товара по правилам чпу.
25 Августа 2016, 10:45:20
Ответ #7
  • Фрилансер
  • *
  • Сообщений: 167
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
твою мать!1111 :o :o :o
я как всегда залез дальше, чем следовало. я уже начал дебажить где-то внутри ядра, а оказывается оно все рядом было :)
спасибо! опять
25 Августа 2016, 11:04:50
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 167
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
относительно выше отписавшегося вопроса:
вам нужно проверить регуляркой вхождение подстроки "piony" и вписать каноникал нужный на, например, site.ru/piony
по сути вроде и всё.
25 Августа 2016, 12:11:45
Ответ #9
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />
Так вот этот код и определит один url страницы товара по правилам чпу.
Загрузите этот код и посмотрите как он работает когда карточка отрабатывается одновременно по разным категориям
25 Августа 2016, 12:14:07
Ответ #10
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
относительно выше отписавшегося вопроса:
вам нужно проверить регуляркой вхождение подстроки "piony" и вписать каноникал нужный на, например, site.ru/piony
по сути вроде и всё.
Мне необходимо настроить таким образом, что бы канонический адрес указывался исходя из того какая присвоена главная категорию товару
25 Августа 2016, 12:44:39
Ответ #11
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Кто-нибудь в курсе каким должен быть код?
25 Августа 2016, 12:45:41
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 32988
  • Репутация: +26759/-0
    • Просмотр профиля
Мне необходимо настроить таким образом, что бы канонический адрес указывался исходя из того какая присвоена главная категорию товару
$product['id_category_default']Ид категории по умолчанию.
25 Августа 2016, 12:57:29
Ответ #13
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Мне необходимо настроить таким образом, что бы канонический адрес указывался исходя из того какая присвоена главная категорию товару
$product['id_category_default']Ид категории по умолчанию.
Вставляем {if $page_name == 'product' && isset($product['id_category_default'])}
<link rel="canonical" href="{$link->getProductLink($product['id_category_default'])}" />
{/if}
верно?
разницы нет, по прежнему каноникал показывается соответствующий просматриваемой ссылке.
25 Августа 2016, 13:01:08
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 2156
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />
Так вот этот код и определит один url страницы товара по правилам чпу.
Загрузите этот код и посмотрите как он работает когда карточка отрабатывается одновременно по разным категориям
Загрузил, только на страницу товара. Везде один canonical. Зачем его добавлять на страницы категории? Робот переходит на страницы товара и определяет группу страниц и один предпочитаемый адрес.