Тег canonical

Автор Anque, 23 августа 2016, 13:00:13

« назад - далее »

Anque

собственно говоря, как расставить эти теги?
их суть сводится к тому, чтобы бот считывал только 1 версию страницы, которую мы указываем в этом теге, т.е. "оригинал".
стоит шаблон leo_exist, все скрипты подключаются в header.tpl и footer.tpl, окей, а как я могу указать каноникалы, если контент может быть разный? ну, т.е. он динамический.
пагинация и все остальные страницы магазина... а хедер и футер ведь статичны в какой-то мере.
нужно как-то в хедере определить текущую страницу и прописать нужные каноникал, но в файлах *.tpl php-скрипт не выполняется...
хелпгайз

Adik

Используйте модуль seoexpert, в нем можно задать разные шаблоны формирования мета тегов.

Anque

а бесплатные варианты есть?

Миколас

Бесплатный закрывать пагинацию в htaccess. На форуме есть информация как сделать.

grandlunge

#4
Здравствуйте! хочу поднять один вопрос на обсуждение касательно формирования канонического адреса для карточки товара, при этом когда карточка товара доступна сразу по нескольким адресам.

к примеру карточка товара доступна по адресам:
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" />

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

Есть кто решил подобную проблему?

Anque

#5
оформляйте код тегом code, и насчет моей темы таки:
я придумал (и выше сйечас увидел, что так и делают) просто привязывать значение текущего урла к переменной  смарти, после чего в хедер.тпл подключать по некоторым критериям. собсно, вопрос, а где происходит подвязка переменных для шаблона хедер.тпл? чойта я ничего не нашел.
если накладно, то готов вставить костыль - напхпшить прямо там, однако не получилось включить выполнение пхп-скриптов в файлах шаблонов.
хелпмигайз

Миколас

{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />

Так вот этот код и определит один url страницы товара по правилам чпу.

Anque

твою мать!1111 :o :o :o
я как всегда залез дальше, чем следовало. я уже начал дебажить где-то внутри ядра, а оказывается оно все рядом было :)
спасибо! опять

Anque

относительно выше отписавшегося вопроса:
вам нужно проверить регуляркой вхождение подстроки "piony" и вписать каноникал нужный на, например, site.ru/piony
по сути вроде и всё.

grandlunge

Цитата: Миколас от 25 августа 2016, 10:30:39
{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />

Так вот этот код и определит один url страницы товара по правилам чпу.
Загрузите этот код и посмотрите как он работает когда карточка отрабатывается одновременно по разным категориям

grandlunge

Цитата: Anhk от 25 августа 2016, 11:04:50
относительно выше отписавшегося вопроса:
вам нужно проверить регуляркой вхождение подстроки "piony" и вписать каноникал нужный на, например, site.ru/piony
по сути вроде и всё.
Мне необходимо настроить таким образом, что бы канонический адрес указывался исходя из того какая присвоена главная категорию товару

grandlunge

Кто-нибудь в курсе каким должен быть код?

coder

Цитата: grandlunge от 25 августа 2016, 12:14:07
Мне необходимо настроить таким образом, что бы канонический адрес указывался исходя из того какая присвоена главная категорию товару
$product['id_category_default']
Ид категории по умолчанию.

grandlunge

Цитата: coder от 25 августа 2016, 12:45:41
Цитата: grandlunge от 25 августа 2016, 12:14:07
Мне необходимо настроить таким образом, что бы канонический адрес указывался исходя из того какая присвоена главная категорию товару
$product['id_category_default']
Ид категории по умолчанию.
Вставляем {if $page_name == 'product' && isset($product['id_category_default'])}
<link rel="canonical" href="{$link->getProductLink($product['id_category_default'])}" />
{/if}
верно?
разницы нет, по прежнему каноникал показывается соответствующий просматриваемой ссылке.

Миколас

Цитата: grandlunge от 25 августа 2016, 12:11:45
Цитата: Миколас от 25 августа 2016, 10:30:39
{if $page_name == 'product' && isset($product->id)}
<link rel="canonical" href="{$link->getProductLink($product->id)}" />

Так вот этот код и определит один url страницы товара по правилам чпу.
Загрузите этот код и посмотрите как он работает когда карточка отрабатывается одновременно по разным категориям
Загрузил, только на страницу товара. Везде один canonical. Зачем его добавлять на страницы категории? Робот переходит на страницы товара и определяет группу страниц и один предпочитаемый адрес.