Каноническая структура для /u/* приводит к индексации множества URL

Изначально я написал это для категории «Баги»…

… но не останавливайте меня, если кто-то считает, что это заслуживает PR или коммита :crossed_fingers:

Последние два месяца я довольно глубоко изучал каноническую структуру Discourse, и в целом она отличная.

Странные URL-адреса с параметрами вроде no_definitions=true или /search?q= возвращают правильный канонический URL.

Всё это работает при обслуживании JS-версии сайта как для пользователей, так и для поисковых роботов.

Однако, похоже, URL-адреса вида /u/* были упущены из виду — у них есть канонические ссылки, но они ведут на адреса, из-за которых Google индексирует тысячи лишних URL.

Задача:

Я хочу, чтобы все URL-адреса после имени пользователя указывали канонически на основную страницу профиля пользователя.

Таким образом, /u/FlyNumber — это основная страница профиля.

Следующие URL должны иметь каноническую ссылку на него (вместо того, что происходит сейчас, когда каноническая ссылка указывает на сам себя):

/u/FlyNumber/summary
/u/FlyNumber/activity
/u/FlyNumber/activity/topics
/u/FlyNumber/activity/replies
/u/FlyNumber/activity/likes-given
/u/FlyNumber/badges
1 лайк

Это для вашей настройки кастомной индексации, о которой обсуждалось здесь?

Если да, то стоит отметить это, чтобы те, кто рассматривает эту работу, понимали, на что идут.

По умолчанию URL-адреса в формате /u/ не индексируются — это установлено как в robots.txt, так и передаётся в начальном заголовке запроса страницы.

image

4 лайка

Нет, так как я отказался от использования prerender — он не мог рендерить главное меню, кнопку входа и т. д.

Google Bot получает «приложение» напрямую.

У меня в скрытых настройках Discourse установлено значение для обслуживания краулеров JS-версии. Google, кажется, справляется с этим хорошо. (Скоро будут дополнительные обновления по этому поводу.)

Хорошее замечание, /badges тоже…

Я использую отредактированный вручную файл robots.

Я использую Cloudflare Workers, чтобы изменить заголовок на 'index'

/u/FlyNumber/summary
/u/FlyNumber/activity
/u/FlyNumber/activity/topics
/u/FlyNumber/activity/replies
/u/FlyNumber/activity/likes-given
/u/FlyNumber/badges

Хочу также отметить, что полное удаление канонических ссылок для этих URL-адресов было бы шагом в правильном направлении. (На мой взгляд, мой метод лучше для SEO)

Как указано выше, установлено значение noindex, поэтому неясно, зачем Discourse вообще генерирует каноническую ссылку.

Возможно, кто-то знает умный способ сделать это с помощью JS и Cloudflare Workers? Таким образом, мне не придется лезть в код Discourse.

Я могу настроить «триггер» на /u/*/summary — (я могу срабатывать только на /u/*) — и выполнить что-то вроде этого:

const canonical = document.querySelector('link[rel="canonical"]');
if (canonical !== null) {
  canonical.href = 'ЗДЕСЬ_НОВЫЙ_HREF';
}

Что я могу сделать здесь, чтобы передать имя пользователя в ЗДЕСЬ_НОВЫЙ_HREF — и чтобы канонический URL стал /u/* вместо /u/*/summary.

Любая помощь здесь будет очень кстати.

Редактирование

Возможно, кто-то сможет указать на соответствующие страницы на GitHub — я рискну и отредактирую код сам.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.