Ошибка на странице, как в ядре, так и в плагине карты сайта

Кажется, здесь наложены друг на друга две или три ошибки со смещением на единицу…

Как только в теме появляется 18 сообщений, в файле sitemap_recent.xml начинает отображаться URL с номером страницы https://forum.example.com/t/slug/123?page=2.

Проблема 1: Страница 2 не существует, пока в теме не будет 20 сообщений, но эта ссылка присутствует в карте сайта.
Ожидаемое поведение: ссылка с page=2 не должна появляться в карте сайта, пока в теме не станет 20 сообщений.

Проблема 2: Когда в теме 18 сообщений, переход по этой ссылке выдаёт ошибку «Эта страница не существует».
Ожидаемое поведение: ошибка обрабатывается корректно, и пользователь перенаправляется в конец темы.

Проблема 3: Когда в теме 19 сообщений, переход по этой ссылке выдаёт сообщение «Ошибка. При загрузке что-то пошло не так».
Ожидаемое поведение: ошибка обрабатывается корректно, и пользователь перенаправляется в конец темы.

Проблема 4: Когда в теме более 20 сообщений, но некоторые были удалены, и общее количество видимых сообщений стало меньше, параметр ?page=2 остаётся в карте сайта недавних тем, пока не появится одно новое сообщение, после чего он исчезает.
Ожидаемое поведение: номер страницы должен исчезнуть (или уменьшиться для более высоких страниц), отражая фактическое количество доступных страниц.

Хуже всего то, что эта некорректная ссылка также отображается в Google!
Проблема 5: при клике на эту ссылку пользователь получает ошибку.
Но в Google, по-видимому, создаётся дублированный контент.

Воспроизведение на Meta:

  1. Найдите тему с 17 или 18 ответами:
    image

  2. Найдите её в https://meta.discourse.org/sitemap_recent.xml

  3. Перейдите по ссылке

  4. Проверьте Google

6 лайков

Хм, это не очень хорошо! Нам нужно это исправить и сделать бэкпорт, @zogstrip.

5 лайков

@nbianca, не могли бы вы добавить это в свой список?

3 лайка

Основная проблема с вычислением номеров страниц была в discourse-sitemap:

Проблема с кэшированием была исправлена здесь:

Я также исправил проблему с ошибкой «не найдено» в ядре (незначительная), когда при запросе второй страницы, но наличии только 20 постов (1 страница), сервер отвечал кодом 200:

8 лайков