как правильно реализовать link rel="canonical"?

Кто-то у себя использует? Как реализуете?
Я думал просто использовать сниппет, типа:
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
Дмитрий Иванов
18 января 2015, 15:10
modx.pro
2
15 212
0

Комментарии: 22

Алексей Марченко
18 января 2015, 20:15
0
в оф репо есть пакет — Canonical. Воспользутесь ))) и не изобретайте велосипед!
    Дмитрий Иванов
    18 января 2015, 20:36
    0
    Он просто у меня не работает, не знаю почему. Так же, как я понял по коду, он не вставляет номер страницы при постраничной навигации, что я и хочу решить.
      Алексей Марченко
      18 января 2015, 20:48
      +1
      Вы не правильно все поняли! canonical ничего не меняет, он просто указывает поисковику на «родительскую» страницу

      Если одна страница доступна по нескольким URL адресам, поисковые системы рекомендуют использовать канонические ссылки, указывающие адрес основной страницы – предпочтительный для индексации.

      Задаются они с помощью тега LINK с атрибутом rel=«canonical» в HEAD страницы и поддерживается всеми известными поисковыми машинами, в том числе Яндексом и Google. Атрибут rel=«canonical» помогает не только исключить из выдачи все дубликаты страницы, но и правильно сконцентрировать ценный ссылочный вес.
        Дмитрий Иванов
        18 января 2015, 21:22
        0
        т.е. если у меня на сайте сайт.ру/страница/?page=999 а в canonical при постраничной навигации со всех страниц указано сайт.ру/страница/ — это нормально?
          Алексей Марченко
          18 января 2015, 21:24
          0
          Это его назначение )))) — так что да!
            Дмитрий Иванов
            18 января 2015, 21:31
            0
            Но он же должен исключить дубль, указать на страницу с таким же содержимым, только с правильным адресом. Разве не так? а сайт.ру/страница/?page=999 и сайт.ру/страница/ имеют абсолютно разное содержимое и обе вроде должны быть в выдаче. Я ошибаюсь?
              Алексей Марченко
              18 января 2015, 21:35
              0
              Ошибаетесь. Еще раз прочтите сверху — назначение!
                Дмитрий Иванов
                18 января 2015, 21:39
                0
                т.е. во всех случаях, все страницы постраничной навигации должны иметь в canonical ссылку на первую страницу? Туго понимаю как-то)
                  Алексей Марченко
                  18 января 2015, 21:45
                  +1
                  Если ОДНА страница доступна по нескольким URL адресам, поисковые системы рекомендуют использовать канонические ссылки, указывающие адрес основной страницы – предпочтительный для индексации.
                  Если разные, то canonical вам не нужен!!!
                    Дмитрий Иванов
                    18 января 2015, 21:52
                    0
                    но тот сниппет, который я привел, присутствует в headerе всего сайта. он нужен, ибо modx воспринимает сайт.ру/страница/?page=2 и сайт.ру/страница?page=2 одинаково. а это, как я понимаю, будет дубль для поисковика. Поэтому canonical там нужен, но в нем ссылка просто на сайт.ру/страница/
                    Ну, раз это нормально, то так и оставлю. Спасибо)
                      Дмитрий Иванов
                      18 января 2015, 22:29
                      0
                      Погуглил еще эту тему, и нашел информацию, что для всех страниц пагинации указывать в canonical адрес раздела (первой страницы) — совсем плохая идея. робот может дальше не пойти. И, естественно, самих страниц в выдаче не будет, т.к. основная страница указана первая.
                      Алексей Марченко
                      18 января 2015, 23:04
                      0
                      Ну так используйте модификаторы, и не выводите canonical на страницах с пагинацией!
                      Wassi Wassinen
                      18 января 2015, 23:17
                      0
                      Используй imims для слэша.
Ivan Shvindin
18 января 2015, 23:41
0
Вот мой вариант
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]][[+page:ne=`1`:then=`?page=[[+page]]`]]">
Последнее условие нужно чтобы не было дубля url/ и url/?page=1, но чтобы сработало нужно mFilter c параметром toPlaceholders запихнуть в head выше этого кода, по другому не срабатывает.
    Дмитрий Иванов
    19 января 2015, 12:11
    0
    pdoPage сам убирает page=1 на первой странице)
    надо подумать)
    Может еще кто варианты красивее предложит?
      Ivan Shvindin
      19 января 2015, 12:26
      0
      Сам убирает, но к этой ситуации это не имеет отношения. Смотри подробнее мой код и попробуй разные варианты, чтобы лучше понять.
        Дмитрий Иванов
        19 января 2015, 13:16
        0
        Сделал по-другому. В конце страницы вызывается мой сниппет, который в 1 посте, только он еще берет номер страницы из плейсхолдера, который устанавливает pdoPage для пагинации. Потом мой сниппет устанавливает плейсхолдер самого тега link rel=«canonical».
        Можно вместо вызова сниппета в конце страницы использовать плагин, только надо разобраться, на какое событие вешать)
        такой вот костыль.
    Сергей
    22 июля 2015, 04:56
    0
    А я сделал таким образом: создал доп. поле canonical (сама оригинальность:))) со значением по умолчанию [[++site_url]][[~[[*id]]]].
    В HEAD соответственно:
    <link rel="canonical" href="[[*canonical]]" />
    При создании очередной страницы в случае необходимости caconical можно руками заполнить, указав URL нужной/основной страницы.
      Андрей
      25 октября 2016, 22:29
      0
      Добрый день.
      Подскажите, актуально ли все-таки использование rel=canonical на страницах БЕЗ пагинации? На простом сайте допустим из 10 страниц.
      Ну и тоже самое с каталогом и пагинацией — актуально ли?
        Иван Бочкарев
        26 октября 2016, 05:43
        0
        /* 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.'">';
        }
          Fullstack
          21 октября 2021, 21:02
          0
          Не мешайте Fenom с обычным шаблонизатором, иначе от Fenom будет не оптимизация, а наоборот нагрузка (т.к. Fenom срабатывает как лишний шаблонизатор, потому что запустился стандартный)
            Сергей Шлоков
            21 октября 2021, 21:49
            0
            Комментарий к посту 2015 года. Ну как не вспомнить известный мэм )))
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            22