Что такое noindex и когда его использовать
Директива noindex говорит поисковым системам не включать страницу в индекс, хотя им по-прежнему разрешено ее обходить. Она задается либо мета-тегом в <head> страницы, либо HTTP-заголовком ответа X-Robots-Tag, и это правильный инструмент для страниц, которые должны существовать, но не должны появляться в результатах поиска.
Два места, где живет noindex
Есть ровно два поддерживаемых способа это выразить, и они означают одно и то же:
<meta name="robots" content="noindex">
X-Robots-Tag: noindex
Мета-тег работает только внутри <head> HTML-документа. Заголовок работает для чего угодно, что отправляет сервер, поэтому это единственный вариант для PDF, изображения или JSON-эндпоинта. Вы также можете нацелиться на конкретного краулера по имени, так <meta name="googlebot" content="noindex"> применяется к Google и не трогает остальные системы.
Второе значение в content - отдельное решение. noindex, follow держит страницу вне индекса, позволяя краулерам использовать ее ссылки; noindex, nofollow останавливает и то, и другое. Для постраничного архива или отфильтрованного списка обычно нужен именно noindex, follow, потому что именно ссылки на этих страницах помогают обнаруживать более глубокие страницы.
Когда noindex - правильное решение
Используйте его на страницах, которые должны быть доступны, но которым нечего делать в ранжировании: страницы результатов внутреннего поиска, страницы благодарности и подтверждения заказа, дубликаты для печати, разделы аккаунта пользователя, архивы тегов с одним постом каждый, а также staging- или демо-окружения целиком.
Не используйте его как решение проблемы дублирующегося контента, когда две страницы на самом деле - одно и то же. Для этого существует rel=canonical: канонический адрес объединяет сигналы обоих URL в один, тогда как noindex полностью выбрасывает дубликат, вместе со всеми ссылками.
Правило, которое все понимают неправильно: обход идет первым
Краулеру нужно получить страницу, чтобы увидеть на ней noindex. Если вы блокируете этот URL в robots.txt, краулер никогда его не получает, никогда не видит директиву, и URL все еще может всплыть в результатах по внешним ссылкам, обычно без описания.
Так что совмещать эти два механизма - самоубийственно. Чтобы убрать страницу из поиска, разрешите обход и отдавайте noindex. После того как страница будет повторно обойдена и выпадет из индекса, ее можно заблокировать в robots.txt, если вы еще и хотите сэкономить бюджет обхода. Сделав это в обратном порядке, вы оставите страницу в индексе бессрочно. Размещение noindex внутри robots.txt тоже не работает; Google перестал соблюдать этот незадокументированный синтаксис 1 сентября 2019 года.
Как это утекает из staging в продакшен
Почти каждый серьезный инцидент с noindex начинается как намеренный, правильный noindex на staging-сайте. Затем происходит одно из следующего:
- Копия базы данных. База данных staging восстанавливается поверх продакшена, принося с собой флаг CMS. В WordPress это чекбокс "Discourage search engines from indexing this site" в настройках, хранящийся как строка опции.
- Продвижение конфигурации.
.envstaging или сниппет nginx, добавляющийX-Robots-Tag: noindexк каждому ответу, деплоится вместе с релизом. - Слияние темы или шаблона. Жестко прописанный мета-тег в общем файле макета переживает слияние, которое никто не прочитал построчно.
- Правило CDN или границы сети, написанное для защиты хоста предпросмотра, применяется к паттерну маршрута, который совпадает и с продакшеном.
Причина, по которой это дорого обходится, в том, что ничего не ломается. Сайт отдает 200, загружается нормально и проходит любую проверку аптайма. Трафик угасает в течение дней, пока страницы переобходятся и выпадают, и к моменту, когда кто-то замечает график, восстановление тоже занимает дни.
Как заметить непреднамеренный noindex
- Прочитайте заголовок.
curl -sI https://example.com/ | grep -i x-robots-tagна здоровой странице ничего не возвращает. Все, что он печатает, стоит объяснить. - Прочитайте мета-тег в отданном HTML, а не в редакторе:
curl -s https://example.com/ | grep -i 'name="robots"'. Серверная логика и edge-воркеры могут вставлять теги, которых нет в вашем репозитории. - Проверьте Search Console. Инструмент проверки URL сообщает "Исключено тегом noindex" по каждому URL, а отчет о страницах группирует все затронутые URL под одной причиной.
- Обойдите весь сайт, потому что утечка редко бывает на главной странице, которую вы проверили. Обход помечает noindex по каждому URL, так что шаблон, затрагивающий только страницы товаров, проявится как блок помеченных строк, а не как одна неожиданность.
Noindex на весь сайт - простой случай. Распространенный случай - один шаблон или один маршрут, что как раз и пропускает выборочная проверка главной страницы.
Проверяйте каждую страницу, а не только ту, что вы помните
Для отдельного URL бесплатная проверка noindex считывает мета-тег robots и заголовок X-Robots-Tag в том виде, в каком страница отдается, и говорит, какой из них задал директиву. Чтобы понять, это одна страница или целый раздел, бесплатный инструмент обхода сайта проходит сайт и помечает каждую найденную страницу с noindex вместе с отсутствующими каноническими адресами и дублирующимся содержимым. А поскольку утечка обычно приходит вместе с релизом, опция Indexability в HTTP-мониторе HostTracker считывает оба сигнала при каждой проверке и отправляет уведомление в тот день, когда один из них меняется - SEO-мониторинг объясняет, как это работает.