?page= иногда перенаправляет на страницу с другим каноническим URL

Один из наших клиентов обнаружил следующую проблему, связанную с SEO, которую я могу воспроизвести здесь на meta.

Когда Discourse посещается поисковым роботом, он добавляет ссылки для пагинации ?page=XX следующим образом:

<link rel="next" href="/t/slug/123?page=2">

и

<span itemprop='name'><b><a rel="next" itemprop="url" href="/t/slug/123?page=2">next page â</a></b></span>

Когда такая страница загружается в браузере, Discourse выполняет JavaScript-редирект на URL вида /t/slug/123/NN, где NN — номер поста.

Таким образом, https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2 перенаправляет на https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/23

а https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=3 перенаправляет на https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294/45

Однако иногда на такой странице содержится канонический URL, который не соответствует исходной запрашиваемой странице.

В приведённом выше примере ?page=3 перенаправляет на пост 45, а страница поста 45 содержит канонический URL ?page=2:

<link rel="canonical" href="https://meta.discourse.org/t/post-rate-limit-trigger-for-a-topic-thats-heating-up/98294?page=2" />

Цитируя отчёт клиента по SEO:

Это создаёт цепочку канонических тегов и редиректов, и Google начинает не доверять установленным каноническим тегам.

Мне не удаётся понять, откуда это берётся. Иногда канонический URL указывает на страницу с более высоким номером, иногда — на страницу с меньшим номером (как в этом примере), а иногда он верный.

Я думал, что это может быть связано с удалёнными постами или «шёпотами», но тема с большим количеством удалённых постов не демонстрирует такого поведения (например, https://meta.discourse.org/t/topic-list-previews/101646?page=5 ведёт к посту 471 (!), у которого канонический URL верный: ?page=5). Думаю, это может быть ошибка off-by-one.

7 лайков

Похоже, у нас здесь немного несовпадающие скобки для канонического. @kris.kotlarek, не могли бы вы разобраться на следующей неделе? Вам нужно будет создать пост на локальном сайте с 44 ответами, а затем посмотреть, что произойдет.

6 лайков

@kris.kotlarek уже внес исправление!

Сообщите нам, если что-то будет работать некорректно!

3 лайка