Мы наблюдаем, что большое количество URL-адресов пермалинков тем и пагинации попадает в категорию «Получено — пока не проиндексировано» в Google Search Console (около 35 000 URL на импортированном форуме возрастом около 20 лет, версия Discourse v2026.9.0-latest, self-hosted).
Что мы выяснили:
Discourse предоставляет ссылки на пагинацию ?page=N для краулеров для длинных тем (поскольку реальный интерфейс использует бесконечную прокрутку). Когда клиент с поддержкой JavaScript (включая рендерер Googlebot) загружает один из таких URL ?page=N, Discourse выполняет клиентский редирект на /t/slug//<post_number>.
Воспроизведение:
- Запросите URL темы «холодно», с любым суффиксом номера поста или ?page=:
GET /t///14 →
GET /t// → тот же канонический URL
GET /t///1 → тот же канонический URL
GET /t//?page=127 → (само-ссылающийся, НЕ нормализованный) - Откройте сайт в обычном режиме (JS включен) и перейдите через роутер Ember на URL, содержащий суффикс номера поста (например, нажав на ссылку «перейти к первому непрочитанному посту» в разделе «Рекомендуемые темы»). После завершения перехода SPA, document.querySelector(‘link[rel=canonical]’).href равен текущему URL с номером поста — он не указывает на базовую тему.
Это противоречит собственному заявленному намерению дизайна Discourse. В этом треде 2015 года @sam был предельно ясен:
▎ Темы: канонический URL должен указывать на базовый топ, чтобы отдельные страницы постов не появлялись как отдельные результаты поиска.
▎ Страницы категорий/списков: канонический URL полностью удален, так как списки с пагинацией не являются дубликатами согласно собственным рекомендациям Google.
То, что мы видим сегодня, нарушает это в двух отношениях:
- Тема с ?page=N (пагинация краулера) содержит само-ссылающийся URL с пагинацией в сыром HTML сервера, а не базовый URL темы — хотя темы (в отличие от списков категорий) явно должны были всегда сводиться к базовому URL.
- После клиентского редиректа с ?page=N на /t/slug/id/<post_number>, канонический URL в отрендеренном DOM также остается на URL с номером поста, а не сбрасывается на базовую тему.
Оба случая выглядят как регрессии относительно цели дизайна 2015 года, а не как намеренное текущее поведение.
Почему это важно для индексации: Google использует отрендеренный DOM для сигнала канонического URL. Любой URL с суффиксом номера поста/страницы, к которому Google попадает напрямую — через функцию «ссылка на пост» (активно используемую на нашем форуме через WhatsApp/Discord), через старые внешние бэклинки (мы маппим легаси-пермалинки vBulletin ?p= на URL с номером поста) или через собственный краулер, — объявляет свой собственный канонический URL, вместо того чтобы консолидироваться в базовую тему. В Search Console это проявляется как тысячи почти дублирующихся URL, застрявших в статусе «получено — не проиндексировано».
Примеры затронутых URL из нашего отчета GSC (все последние краулинги в начале сентября 2026):
/t/tengo-que-pasar-la-itv/21100/10
/t/new-honda-nsx-proyect/4910/69
/t/hacer-tubo-recto-sin-silencioso-del-catalizador-hacia-atras/25579/25
/t/kedada-japo-en-cataluna-2014/28148/75
/t/el-diario-de-patricio-de-la-plana/13286?p
Вопрос команде: учитывая, что прошло более 10 лет, что-то изменилось с тех пор, и само-ссылающийся канонический URL на этих URL теперь является намеренным? Или стоит пересмотреть это как регрессию? Готовы предоставить файлы HAR / дополнительные примеры воспроизведения, если это поможет.