Как изменить rel="canonical" в "Человекопонятной навигации", выполненной по инструкции pdoPage?
Подскажите, как исправить следующее.
Воспользовался инструкцией "Человекопонятная навигация"
В результате при переходе на страницу отличную от первой в исходном коде страницы meta тег rel=«canonical» ведет не на каноническую страницу (как было до изменений без параметров page-№), а на текущую, и выглядит следующим образом:
Немного переделал под свои нужды URLы страниц пагинации, но сути не меняет, rel=«canonical» все равно ведет на текущую страницу:
Подскажите, как сделать, чтобы rel=«canonical» при нахождении на любой странице пагинации вел на первую страницу пагинации, вот так:
Вот мой код шаблона:
Заранее, благодарю!
Воспользовался инструкцией "Человекопонятная навигация"
В результате при переходе на страницу отличную от первой в исходном коде страницы meta тег rel=«canonical» ведет не на каноническую страницу (как было до изменений без параметров page-№), а на текущую, и выглядит следующим образом:
<link rel="canonical" href="https://mysite.ru/category/page-2"/>
<link rel="canonical" href="https://mysite.ru/category/page-3"/>
Немного переделал под свои нужды URLы страниц пагинации, но сути не меняет, rel=«canonical» все равно ведет на текущую страницу:
<link rel="canonical" href="https://mysite.ru/category/page/2/"/>
<link rel="canonical" href="https://mysite.ru/category/page/3/"/>
Подскажите, как сделать, чтобы rel=«canonical» при нахождении на любой странице пагинации вел на первую страницу пагинации, вот так:
<link rel="canonical" href="https://mysite.ru/category/"/>
Вот мой код шаблона:
[[!pdoPage@MyPagination?
&element=`pdoResources`
&limit=`3`
&parents=`{$_modx->resource.id}`
&hideContainers=`1`
&fastMode=`1`
&sortby=`publishedon`
&sortdir=`ASK`
&pageLinkScheme=`[[+pageVarKey]]/[[+page]]/`
&includeTVs=`img_sh,alt_img_sh`
&tpl=`@FILE chunks/sh/sh.tpl`
]]
[[!+page.nav]]
Код плагина:<?php
// Реагируем только на событие OnPageNotFound
if ($modx->event->name == 'OnPageNotFound') {
// Определяем ключ запроса из настроек
$req = $modx->getOption('request_param_alias');
// Ловим нужный ключ страницы
$pageVarKey = 'page';
// Если в запросе повторяется наш шаблон "pageVarKey-page", то работаем дальше
if (preg_match("#.*?(/{$pageVarKey}/(\d+))/#", $_REQUEST[$req], $matches)) {
// Отрезаем ЧПУ строку и получаем точный адрес текущей страницы
$uri = str_replace($matches[1], '', $matches[0]);
// Ищем страницу по этому адресу
$id = 0;
// Сначала как есть, со слешем на конце
if (!$id = $modx->findResource($uri)) {
// Если не находим - то пробуем отрезать слэш и ищем повторно
$id = $modx->findResource(rtrim($uri, '/'));
}
// Если ресурс найден
if ($id) {
// Добавляем номер страницы в глобальные массивы, чтобы pdoPage их там увидел
$_GET[$pageVarKey] = $_REQUEST[$pageVarKey] = $matches[2];
// И загружаем эту страницу
$modx->sendForward($id);
}
// Если ресурс не был найден - ничего не делаем, возможно запрос поймает другой плагин
}
}
Заранее, благодарю!
Комментарии: 21
Неужели нет решения?
Здравствуйте!
Пробывали установить в шаблоне адрес, а в вызове снипета установить &setMeta=0?
Добавить в head —
Пробывали установить в шаблоне адрес, а в вызове снипета установить &setMeta=0?
Добавить в head —
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
А в вызов pdoPage добавить параметр — &setMeta=0
Надеюсь был полезен)))
Сейчас попробую.
[[!pdoPage?
&любые параметры вызова
&setMeta=`0`
]]
Ну а тег head редактируете руками…
Этот вариант отключает, например, если находишься на второй странице отключаются мета теги:
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>
И <link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
будет висеть на каждой странице шаблона, даже там, где нет пагинации.
Так ведь
Так понимаю должно получиться:
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
дает Вам каноничную ссылку на всех страницах категории. Ведь Вы этого хотели?Так понимаю должно получиться:
<link rel="canonical" href="https://mysite.ru/category/"/>
на всех страницах…
Да, но при такой реализации следующие мета-теги не регистрируются в head:
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>
Так Вам что нужно видить в head?
Не очень Вас понимаю…
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>
или<link rel="canonical" href="https://mysite.ru/category/"/>
?Не очень Вас понимаю…
pdoPage (БЕЗ ПЕРЕДЕЛКИ ПО ВЫШЕУКАЗАННОЙ ИНСТРУКЦИИ) регистрирует в head если находиться, например, на 2 странице:
Надо сделать, чтобы было как до переделки, чтобы rel=«canonical» указывал на страницу категории без page№
Где-то в коде плагина надо внести изменения, но к сожалению не особо силен в php, конечно если «долго мучиться, что нибудь получится», по крайней мере всегда получалось если ответа не находилось.
<link rel="canonical" href="https://mysite.ru/category/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/?page=3"/>
Я переделал по инструкции, с rel=«prev» и rel=«next» все нормально, выводит правильно, а rel=«canonical» выводится таким образом, что на какой бы странице не находился, канонический адрес указывает на текущую страницу, а не на главную страницу категории.Надо сделать, чтобы было как до переделки, чтобы rel=«canonical» указывал на страницу категории без page№
Где-то в коде плагина надо внести изменения, но к сожалению не особо силен в php, конечно если «долго мучиться, что нибудь получится», по крайней мере всегда получалось если ответа не находилось.
Странно. Я ведь не просил запутать еще больще)))
Покажите что у Вас сейчас и что Вы хотите видить…
После будем разбираться. И думаю php нам не понадобится)
Покажите что у Вас сейчас и что Вы хотите видить…
После будем разбираться. И думаю php нам не понадобится)
Если я верно представляю Вашу проблему, то можно поковыряться с такой конструкцией:
Подробнее:
[[*id:is=`8`:or:is=`9`:then=``:else=`<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />`]]
Ее изменить как нужно и добавить зависимости…Подробнее:
https://docs.modx.pro/sistema/osnovyi/filtryi-vvoda-i-vyivoda
У меня сейчас:
Хочу чтобы было:
Если делать по Вашему варианту, отключить регистрацию мета-тегов — &setMeta=`0` и в head прописать:
<link rel="canonical" href="https://mysite.ru/category/page/2/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>
Хочу чтобы было:
<link rel="canonical" href="https://mysite.ru/category/"/>
<link rel="prev" href="https://mysite.ru/category/"/>
<link rel="next" href="https://mysite.ru/category/page/3/"/>
Если делать по Вашему варианту, отключить регистрацию мета-тегов — &setMeta=`0` и в head прописать:
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
то останется только:<link rel="canonical" href="https://mysite.ru/category/"/>
Попробуйте что то типа:
Остальные 2 по аналогии)
<link rel="canonical" href="[[~[[*id]]? &scheme=`full`]]" />
<link rel="prev" href="[[~[[*id]]? &scheme=`full`]][[+page:ne=`1`:then=`/page/[[+page:add]]`/]]">
<link rel="next" href="[[~[[*id]]? &scheme=`full`]][[+page:ne=`1`:then=`/page/[[+page:decr]]`]]">
Ну и соответственно отключите setMeta в основном вызове…Остальные 2 по аналогии)
По крайнему Вашему варианту на любой странице в коде вот это:
Спасибо за участие, но думаю предложенная концепция не подойдет, так как 3 эти мета-тега постоянно будут в исходном коде. В то время как при нахождении на первой и последней странице должно быть 2 мета-тега.
То есть,
если находиться на 1 странице должно быть:
Поэтому без правки php кода, думаю, не обойтись.
<link rel="canonical" href="https://mysite.ru/uslugi/" />
<link rel="prev" href="https://rmysite.ru/uslugi/">
<link rel="next" href="https://mysite.ru/uslugi//page/-1">
Спасибо за участие, но думаю предложенная концепция не подойдет, так как 3 эти мета-тега постоянно будут в исходном коде. В то время как при нахождении на первой и последней странице должно быть 2 мета-тега.
То есть,
если находиться на 1 странице должно быть:
<link rel="canonical" href="https://rmysite.ru/uslugi/"/>
<link rel="next" href="https://rmysite.ru/uslugi/page/2/"/>
Если находиться на последней (3-последняя страница), то должно быть:<link rel="canonical" href="https://rmysite.ru/uslugi/"/>
<link rel="prev" href="https://rmysite.ru/uslugi/page/2/"/>
Поэтому без правки php кода, думаю, не обойтись.
Ну тут смотрите сами, как удобно…
Просто к примеру можно один из тегов можно не выводить при нахождении к примеру на первой или второй странице… Проблема только в настройке ведь…
Просто к примеру можно один из тегов можно не выводить при нахождении к примеру на первой или второй странице… Проблема только в настройке ведь…
Проблема в том, что у разных категорий могут быть свои шаблоны, это придется там где пагинация, прописывать каждый раз в шаблоне.
Хочется сделать в одном месте и там где пагинация, чтобы это включалось.
Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/
Хочется сделать в одном месте и там где пагинация, чтобы это включалось.
Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/
или хотя бы один раз прописать в шаблоне по вашему варианту, но с условиями, что если ресурс с пагинацией, то выводить нужное…
Думаю, как-то в плагине надо прописать условие, что если это rel=«canonical» то не применять /page/№/Так в статье, которую я указывал Выше и есть такие примеры вывода…
Добрый день!
Удалось найти решение?
Также столкнулся с проблемой неправильного формирования canonical при включение «человекопонятной навигации» в pdoPage
Удалось найти решение?
Также столкнулся с проблемой неправильного формирования canonical при включение «человекопонятной навигации» в pdoPage
Работает, если только в сиппете PdoPage заменить строку 244:
$modx->regClientStartupHTMLBlock('<link rel="canonical" href="' . $canurl . '"/>');
на$modx->regClientStartupHTMLBlock('<link rel="canonical" href="' . $pdoPage->makePageLink($canurl) . '"/>');
но при очередном обновлении это все слетит =(
Спасибо большое)
Все чудесным образом получилось!)
Все чудесным образом получилось!)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.