как правильно реализовать link rel="canonical"?
Кто-то у себя использует? Как реализуете?
Я думал просто использовать сниппет, типа:
Использую pdoPage
Я думал просто использовать сниппет, типа:
if ($modx->resource->id == $modx->getOption('site_start'))
{
return '<link rel="canonical" href="[[++site_url]]">';
}
return '<link rel="canonical" href="[[++site_url]][[~[[*id]]]]">';
но проблема с постраничной навигацией. Как мне из этого сниппета узнать, что на данной странице действительно есть постраничная навигация, а не просто в урл дописали page=999?Использую pdoPage
Комментарии: 22
в оф репо есть пакет — Canonical. Воспользутесь ))) и не изобретайте велосипед!
Он просто у меня не работает, не знаю почему. Так же, как я понял по коду, он не вставляет номер страницы при постраничной навигации, что я и хочу решить.
Вы не правильно все поняли! canonical ничего не меняет, он просто указывает поисковику на «родительскую» страницу
Если одна страница доступна по нескольким URL адресам, поисковые системы рекомендуют использовать канонические ссылки, указывающие адрес основной страницы – предпочтительный для индексации.
Задаются они с помощью тега LINK с атрибутом rel=«canonical» в HEAD страницы и поддерживается всеми известными поисковыми машинами, в том числе Яндексом и Google. Атрибут rel=«canonical» помогает не только исключить из выдачи все дубликаты страницы, но и правильно сконцентрировать ценный ссылочный вес.
т.е. если у меня на сайте сайт.ру/страница/?page=999 а в canonical при постраничной навигации со всех страниц указано сайт.ру/страница/ — это нормально?
Это его назначение )))) — так что да!
Но он же должен исключить дубль, указать на страницу с таким же содержимым, только с правильным адресом. Разве не так? а сайт.ру/страница/?page=999 и сайт.ру/страница/ имеют абсолютно разное содержимое и обе вроде должны быть в выдаче. Я ошибаюсь?
Ошибаетесь. Еще раз прочтите сверху — назначение!
т.е. во всех случаях, все страницы постраничной навигации должны иметь в canonical ссылку на первую страницу? Туго понимаю как-то)
Если ОДНА страница доступна по нескольким URL адресам, поисковые системы рекомендуют использовать канонические ссылки, указывающие адрес основной страницы – предпочтительный для индексации.Если разные, то canonical вам не нужен!!!
но тот сниппет, который я привел, присутствует в headerе всего сайта. он нужен, ибо modx воспринимает сайт.ру/страница/?page=2 и сайт.ру/страница?page=2 одинаково. а это, как я понимаю, будет дубль для поисковика. Поэтому canonical там нужен, но в нем ссылка просто на сайт.ру/страница/
Ну, раз это нормально, то так и оставлю. Спасибо)
Ну, раз это нормально, то так и оставлю. Спасибо)
Погуглил еще эту тему, и нашел информацию, что для всех страниц пагинации указывать в canonical адрес раздела (первой страницы) — совсем плохая идея. робот может дальше не пойти. И, естественно, самих страниц в выдаче не будет, т.к. основная страница указана первая.
Ну так используйте модификаторы, и не выводите canonical на страницах с пагинацией!
Используй imims для слэша.
Вот мой вариант
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]][[+page:ne=`1`:then=`?page=[[+page]]`]]">
Последнее условие нужно чтобы не было дубля url/ и url/?page=1, но чтобы сработало нужно mFilter c параметром toPlaceholders запихнуть в head выше этого кода, по другому не срабатывает.
pdoPage сам убирает page=1 на первой странице)
надо подумать)
Может еще кто варианты красивее предложит?
надо подумать)
Может еще кто варианты красивее предложит?
Сам убирает, но к этой ситуации это не имеет отношения. Смотри подробнее мой код и попробуй разные варианты, чтобы лучше понять.
Сделал по-другому. В конце страницы вызывается мой сниппет, который в 1 посте, только он еще берет номер страницы из плейсхолдера, который устанавливает pdoPage для пагинации. Потом мой сниппет устанавливает плейсхолдер самого тега link rel=«canonical».
Можно вместо вызова сниппета в конце страницы использовать плагин, только надо разобраться, на какое событие вешать)
такой вот костыль.
Можно вместо вызова сниппета в конце страницы использовать плагин, только надо разобраться, на какое событие вешать)
такой вот костыль.
А я сделал таким образом: создал доп. поле canonical (сама оригинальность:))) со значением по умолчанию [[++site_url]][[~[[*id]]]].
В HEAD соответственно:
В HEAD соответственно:
<link rel="canonical" href="[[*canonical]]" />
При создании очередной страницы в случае необходимости caconical можно руками заполнить, указав URL нужной/основной страницы.
Добрый день.
Подскажите, актуально ли все-таки использование rel=canonical на страницах БЕЗ пагинации? На простом сайте допустим из 10 страниц.
Ну и тоже самое с каталогом и пагинацией — актуально ли?
Подскажите, актуально ли все-таки использование rel=canonical на страницах БЕЗ пагинации? На простом сайте допустим из 10 страниц.
Ну и тоже самое с каталогом и пагинацией — актуально ли?
/* Canonical snippet */
/* Author Bob Ray */
/* produces an appropriate canonical tag for home and other pages */
/* put the snippet tag [[Canonical]] in the <head> section of your template(s) */
$docid = $modx->resource->get('id');
$resource = $modx->getObject('modResource', $docid);
if($resource->get('class_key') == 'modSymLink') {
$id = intval($resource->get('content'));
$url = $modx->makeUrl($id, '', '', 'full');
return '<link rel="canonical" href="'.$url.'">';
}
Не мешайте Fenom с обычным шаблонизатором, иначе от Fenom будет не оптимизация, а наоборот нагрузка (т.к. Fenom срабатывает как лишний шаблонизатор, потому что запустился стандартный)
Комментарий к посту 2015 года. Ну как не вспомнить известный мэм )))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.