Поисковые системы теперь заблокированы от индексации неканонических страниц

:warning: Важно

После дальнейшего расследования мы решили оставить индексацию неканонических страниц включённой. Подробнее см. по ссылке: Search engines now blocked from indexing non-canonical pages - #30 by sam

оригинальное объявление

Discourse теперь будет отвечать заголовком X-Robots-Tag: noindex, если запрошенная страница не является канонической для ресурса.

Хотя Discourse использует автоматическую прокрутку для списков тем и самих тем, это не то, что показывают поисковым роботам, таким как GoogleBot. Поисковые системы видят тематические страницы с пагинацией, по 20 постов на каждой. Однако, поскольку пользователи могут ссылаться на конкретные посты в своих сообщениях, используя формат URL /t/title/topic_id/post_id, поисковые роботы будут находить эти ссылки, что приведёт к дублированию контента в результатах поиска по вашему сайту и к бесполезной трате ограниченного бюджета сканирования вашего домена.

Чтобы решить эту проблему, наше сообщество пользователей предложило добавить заголовок X-Robots-Tag: noindex для URL-адресов, указывающих на конкретные посты. Нам удалось распространить это решение на все неканонические URL-адреса в Discourse. Эта функция была выпущена как скрытая настройка сайта и по умолчанию отключена три месяца назад. За это время мы тестировали включение этого заголовка как на сайтах сообщества, так и на meta.discourse.org.

Поскольку результаты этого периода выглядят обнадеживающе, мы включили эту настройку по умолчанию.

Если по какой-то причине вы не хотите такого поведения на вашем экземпляре, вы всё ещё можете разрешить индексацию неканонических страниц, выполнив на вашем сервере команду: docker exec -i app rails runner "SiteSetting.allow_indexing_non_canonical_urls = true".

Не ожидайте резких изменений в процессе сканирования и результатах поиска в одночасье, но в течение следующих месяцев вы увидите уменьшение количества сканирований и результатов поиска для страниц конкретных постов. Это приведёт к тому, что больше времени сканирования будет уделяться новым темам на вашем сайте и контенту, который ещё не был проиндексирован из-за ограничений бюджета сканирования вашего домена.

32 лайка

TL;DR: Не блокируйте неканонические страницы — просто укажите на правильный URL через <link rel="canonical" … >. Для этого он и создан.


Эта функция может нанести долгосрочный вред SEO-ссылочной массе:
Все глубокие ссылки на ответы внутри тем теперь находятся на страницах с noindex! Нравится ли это Google?

На самом деле тег canonical, всегда указывающий на URL темы — даже для страниц с глубокими ссылками на конкретный ответ — должен идеально справляться с задачей без добавления X-Robots-Tag: noindex:
При первом сканировании страницы с глубокой ссылкой на ответ Google распознаёт, что URL страницы (ответ внутри темы) не соответствует каноническому URL, и решает сканировать только канонический URL (тему).


Можем ли мы добавить <a rel="nofollow" …> ко всем ссылкам, ведущим на глубокие ссылки «тема-ответ»? Редакция: нет, см. Search engines now blocked from indexing non-canonical pages - #9 by j127
Таким образом, мы сможем сэкономить ещё больше драгоценного и ограниченного бюджета сканирования поисковых систем:
поисковая система не будет извлекать ссылку изначально и не будет делать запрос к URL. Поскольку запрос к URL приводит к ответу с HTTP-заголовком X-Robots-Tag: noindex, что заставляет ответ быть «отбракованным» путём добавления URL во внутренний список «noindex» поисковой системы.

Ещё больше экономии бюджета сканирования за счёт добавления nofollow к URL RSS-лент:

5 лайков

Я полностью согласен с предложениями @rrit.

Лучше указывать на оригинальный канонический адрес для подстраниц или постов внутри темы, вместо того чтобы блокировать их.

Вместо добавления noindex, можно ли добавить тег nofollow к каждому ответу в теме?

1 лайк

Так уже работает, поэтому я не совсем понимаю, что вы имеете в виду.

Вы предлагаете, что нам нужно обновить URL здесь

чтобы использовать канонический URL с номером страницы и якорем сообщения?

Они уже заблокированы через robots.txt, но это хорошая идея!

Звучит тоже как хорошая идея!

4 лайка

Вы правы, извините. Иногда я теряюсь в собственных мыслях. :slight_smile:

Быстрый вопрос: я предполагаю, что эта функция уже доступна по умолчанию, если мы обновим Discourse до версии 2.9?

4 лайка

Я считаю, что эта функция не должна быть включена по умолчанию. С точки зрения трафика это опасно, даже если она включена лишь на короткое время, поэтому любой, кто обновится сейчас, может столкнуться с неприятным сюрпризом.

Тег canonical — это способ, который рекомендует Google для решения этой проблемы, и он, судя по всему, уже работает. Странные манипуляции с тегами canonical могут привести к неожиданным проблемам в Google, а ошибка с noindex может быть сложной для исправления.

2 лайка

Я согласен с первой частью вашего сообщения, но не считаю, что использование nofollow для внутренних ссылок является оптимальным решением. Внутренние ссылки помогают поисковым системам понять, какие страницы сайта важны. Google не будет переходить по каждой увиденной ссылке, так как знает, что уже видел их раньше. Если они видят URL вроде example.com/t/1234/5, но уже сканировали его и знают, что его канонический URL — example.com/t/1234, они, скорее всего, не станут тратить вычислительные ресурсы на повторное посещение неканонической версии.

3 лайка

Удалить ‘noindex’ для URL, на которые ведут ссылки с внешних сайтов

Извините, под «ответами» я имею в виду «посты» в теме:
Все глубокие ссылки с внешних доменов на посты (например, forum.example.com/t/example-topic/5/11) теперь содержат HTTP-заголовок X-Robots-Tag: noindex! Я предлагаю снова удалить этот HTTP-заголовок.

Я предлагаю для <link rel="canonical" … > никогда не использовать URL с якорем поста (последнее число в …/t/example-topic/1234/5) ни в коем случае. Канонические URL всегда должны указывать на сам URL темы (…/t/example-topic/1234). Мне кажется, это уже реализовано именно так.


Переписывать ссылки для поисковых систем, если целевой URL «перенаправляется» через <link rel="canonical" … >

Очень верное замечание, лучше не добавлять rel="nofollow" здесь.

У Discourse есть специальный вид для краулеров. Новое предложение только для вида краулера:
Преобразовать все внутренние ссылки, ведущие на URL поста (example.com/t/1234/5), чтобы они указывали на соответствующий URL темы (example.com/t/1234) вместо этого.
Намерение: Не сообщать поисковым системам о дополнительных URL, если эти дополнительные URL всё равно «перенаправляются» через <link rel="canonical" … >.

Места, где обнаруживаются такие ссылки на посты:

  • ссылки, добавленные вручную в контенте пользователей
  • автоматически сгенерированные ссылки в:
    • цитатах
    • первом посте темы: «отслеживаемые входящие ссылки» из других тем
    • первом посте темы: «выбранный ответ»
    • первом посте темы при открытом плане темы: «ссылки темы»/«ссылки, получившие лайки»

Отступление: Где Google находит все эти URL?


«Отслеживаемые входящие ссылки» для поисковых систем

Именно по этой причине автоматически генерируемые «отслеживаемые входящие ссылки из других тем» в первом посте темы также должны быть видны поисковым системам.
Сейчас эти «отслеживаемые входящие ссылки» отсутствуют в виде краулера. Редакция: Они уже есть в виде краулера.

Но указывают на URL поста вместо URL темы (см. исходный код HTML)
<div class="crawler-linkback-list" itemscope="" itemtype="http://schema.org/ItemList">
      <div itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem">
        <a href="https://meta.discourse.org/t/removing-the-2-3-4-etc-links-for-each-reply-within-a-topic-url/209648/26" itemscope="" itemtype="http://schema.org/DiscussionForumPosting" itemprop="item">
          <meta itemprop="url" content="https://meta.discourse.org/t/removing-the-2-3-4-etc-links-for-each-reply-within-a-topic-url/209648/26">
          <span itemprop="name">Удаление ссылок /2, /3, /4 и т.д. для каждого ответа в URL темы</span>
        </a>
        <meta itemprop="position" content="2">
      </div>
</div>
3 лайка

Это ключевой момент. Одно дело — добиться индексации всех ваших страниц, и совсем другое — получить релевантное ранжирование для них. По моему опыту (с сайтами крупных издательств), умная внутренняя перелинковка — это главное для достижения этой цели.

1 лайк

Я обновился сегодня утром, рекомендуете ли вы включить индексацию неканонических страниц при этом?

Я бы не хотел ещё больше ухудшить свою индексацию.

1 лайк

Для тех, кто обновил свой сайт после даты публикации исходного сообщения.

У нас есть данные, показывающие, что новый заголовок сокращает время сканирования на таких страницах, при этом канонический URL всегда был установлен.

Но эти страницы и не предназначены для сканирования. Метаданные с URL устанавливаются на уровне темы; мы не хотим, чтобы Google сканировал уровень сообщений, так как это дублирующийся контент.

Отлично, значит, здесь ничего менять не нужно.

Выполнение этого во время выполнения может быть слишком затратным по процессорному времени, а сохранение двух версий каждого сообщения — слишком затратным по дисковому пространству.

Наши настройки по умолчанию всегда являются тем, что мы рекомендуем. Однако мы поддерживаем и объявляем настройки сайта, чтобы пользователи могли выбрать иное, если считают, что настройка по умолчанию не идеальна для их сайта.

5 лайков

Отлично, тогда я оставлю как рекомендовано.
Спасибо

2 лайка

Последний вопрос, и я больше не буду вас беспокоить :sweat_smile:

Так могут ли возникнуть проблемы с файлом sitemap_recent.xml, который содержит такие ссылки?
https://meta.discourse.org/t/category-moderator-improvements/158628?page=2

1 лайк

Привет! Я готов помочь с переводом. Пожалуйста, предоставьте текст, который нужно перевести, и укажите целевой язык (например, ru для русского, en для английского и т.д.).

2 лайка

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

# A: 
Внешний домен
|
|--(вес ссылки)---> URL сообщения
                   |
                   |__/ индексация:      \---> URL сообщения не индексируется и
                      \ заголовок noindex /     вес ссылки в основном теряется

# B:
Внешний домен
|
|--(вес ссылки)---> URL сообщения
                   |
                   |__/ индексация:        \__|---> URL сообщения не индексируется
                      \ канонический ответ /  |---> URL темы индексируется (в любом случае)
                                                 с передачей веса ссылки

Нам стоит поднять этот вопрос на

1 лайк

Для новичков, таких как я, в вопросах SEO, означает ли это улучшение SEO, которое потенциально может привести к незначительному росту/преимуществу в результатах поиска Google?

3 лайка

Да, это и есть наша цель!

Мы тестировали это изменение в сообществе технологических новостей в течение нескольких месяцев и наблюдали значительный рост пиковых значений анонимных просмотров страниц. Наша конечная цель — всегда делать все сообщества Discourse более здоровыми во всех отношениях.

6 лайков

Виден ли этот эффект в отчёте Google Search Console в разделе «Настройки» → «Сканирование» → «Статистика сканирования»?

1 лайк

С учётом …

A. Снижение количества сканирований

B. Отсутствие двух версий контента

C. Использование тега canonical

D. Отсутствие nofollow

E. Отсутствие noindex

… и наличие внутренних ссылок на …

… я предлагаю следующую реализацию для достижения наилучшего компромисса:

  1. Не добавлять HTTP-заголовок X-Robots-Tag: noindex.
    – с учётом пункта [E] –
  2. Всегда указывать теги canonical на URL темы.
    – снижение количества сканирований [A] и учёт пункта [C] –
  3. Только для представления поисковым роботам: Автоматически преобразовывать сгенерированные ссылки так, чтобы они всегда вели на URL темы вместо URL сообщения — для всех ссылок в первом сообщении темы «отслеживаемые входящие ссылки из других тем» и «карта темы открыта: ссылки на темы/лайкнутые ссылки».
    – снижение количества сканирований [A] и учёт пункта [D], но намеренное игнорирование пункта [B] –
    По пункту [B]: расходы процессорного времени возникают только при посещениях поисковыми роботами и заключаются в выполнении замены по регулярному выражению для удаления последней цифры во внутренних URL, заканчивающихся на две цифры, например …/t/example-topic/1234/5…/t/example-topic/1234, в пределах первого сообщения темы «отслеживаемые входящие ссылки из других тем» и «карта темы открыта».
  4. Для всех представлений: добавлять внутренний nofollow к цитатам и ссылкам, добавленным вручную в контенте пользователей.
    – снижение количества сканирований [A] и учёт пункта [B], но незначительное игнорирование пункта [D] –
    По пункту [D]: важные ссылки уже автоматически дублируются в первом сообщении темы в разделе «карта темы открыта: ссылки на темы/лайкнутые ссылки» [см. пункт 3.], и большинство цитат в любом случае остаются внутри самой темы.

Некоторые идеи о внутренних ссылках

Google говорит: How to Specify a Canonical with rel="canonical" and Other Methods | Google Search Central  |  Documentation  |  Google for Developers

И Google говорит: SEO Link Best Practices for Google | Google Search Central  |  Documentation  |  Google for Developers

Таким образом, Discourse может устанавливать внутренние ссылки следующим образом:

<a href="/t/example-topic/1234" routerLink="/t/example-topic/1234/5">…</a>

Для Google ссылка ведёт прямо на канонический URL темы …/1234, и Google не узнает об URL сообщения …/1234/5 из этой синтаксической конструкции.

Для навигации пользователей достаточно небольшого JavaScript в приложении Ember:
например, заменить href на routerLink.

2 лайка

Выглядит как отличное улучшение! Спасибо, что сделали это возможным, @Falco и команде Discourse!

3 лайка