Страницы услуг открываются, показывают правильные заголовки, но проверка обнаруживает noindex. Причина может находиться не в самой странице. Настройку могли оставить в общем layout.tsx, добавить в более близком сегменте или передать отдельным HTTP-заголовком на сервере.
Ниже собственный учебный пример проекта на Next.js 15 с App Router. У него есть публичные услуги и закрытый кабинет. Мы хотим открыть для поиска только услуги, сохранив прежние правила кабинета и тестового окружения. Пример не означает, что любая найденная директива noindex ошибочна.
Сначала установите, какую страницу собираетесь открыть
Запишите точный URL услуги, конечный адрес после переходов и окружение: production, preview или локальная разработка. Для каждого нужен свой ожидаемый результат. Страница https://example.ru/services/design может быть публичной, а похожая страница на preview-домене — намеренно закрытой.
Откройте URL без авторизации. Если содержимое зависит от сеанса пользователя, вы можете проверять личную версию страницы, которую робот вообще не получит. Уточните, одинаково ли приложение отвечает обычному гостю и поисковому роботу. Не превращайте техническую диагностику в попытку открыть клиентские документы или административные разделы.
Сохраните обнаруженную директиву полностью, включая имя тега. robots относится к общей политике, googlebot — к конкретному роботу. Также нужен HTTP-заголовок X-Robots-Tag, если он присутствует. Одного скриншота надписи «Индексация запрещена» мало, чтобы определить её источник.
Пройдите по цепочке layout и page
В App Router настройки страницы складываются из сегментов маршрута. Начните с корневого app/layout.tsx, затем посмотрите вложенные layout и нужный page.tsx. Группы маршрутов в круглых скобках тоже могут иметь layout, хотя их названия отсутствуют в публичном адресе.
Проверьте экспорты metadata и generateMetadata. Например, общий файл может содержать robots: { index: false, follow: false }, оставшийся после разработки. Если вложенная публичная страница не задаёт свою политику, найденная настройка продолжит влиять на результат. Если задаёт, нужно читать её целиком.
Next.js выполняет поверхностное объединение метаданных: вложенный объект robots, определённый ближе к странице, заменяет соответствующий объект предыдущего сегмента. Это не автоматическое поочерёдное объединение всех внутренних полей. Правила наследования Next.js 15 важны, когда разработчик меняет только одно поле и ожидает сохранения остальных.
| Место настройки | Что проверить |
|---|---|
| Корневой layout | Общую политику и зависимости от окружения |
| Layout публичной группы | Настройку именно услуг и каталога |
| Layout кабинета | Отдельное закрытие личных страниц |
| Page или generateMetadata | Последнее определение robots для конкретного адреса |
| Сервер и CDN | Дополнительный X-Robots-Tag |
Опишите политику публичной группы явно
В учебном проекте услуги находятся в app/(public)/services. Их layout задаёт полный нужный объект robots; общие настройки дизайна остаются в родительском layout. Это пример размещения политики, а не универсальный файл для копирования в любой сайт.
// app/(public)/layout.tsx
import type { Metadata } from 'next'
import type { ReactNode } from 'react'
export const metadata: Metadata = {
robots: {
index: true,
follow: true,
googleBot: { index: true, follow: true },
},
}
export default function PublicLayout({ children }: {
children: ReactNode
}) {
return <>{children}</>
}Для app/(private)/account/layout.tsx у этого же примера задают отдельную закрытую политику. Проверьте фактическую структуру: если кабинет случайно вложен в публичную группу, настройка группы может действовать шире, чем предполагалось.
Не меняйте index: false на true массовой заменой по репозиторию. Помимо тестового окружения, закрытие может требоваться поиску внутри сайта, служебным результатам, дублям фильтров или личным страницам. Сначала составьте список маршрутов и разделите ожидаемые результаты. Исключения должны быть описаны так, чтобы следующий разработчик понял их назначение.
Проверьте итоговый ответ, а не только исходный файл
После изменения выполните production-сборку проекта и откройте страницу прямым запросом. Dev-режим удобен для разработки, но приёмку поисковых директив лучше проводить в условиях, близких к опубликованному сайту. Сохраните весь HTML ответа и заголовки.
В некоторых конфигурациях Next.js метаданные передаются потоково. Поэтому отсутствие искомого тега только в начальном фрагменте head ещё не доказывает его отсутствие в завершённом документе. Посмотрите весь ответ и итоговый DOM браузера. При проверке ботом фиксируйте использованный User-Agent: разные способы получения страницы могут давать отличающуюся последовательность отдачи.
В нашем примере три обязательных проверки: публичная услуга, страница кабинета и preview-версия. Услуга больше не содержит запрета индексации. Кабинет сохраняет согласованную политику. Preview остаётся закрытым способом, выбранным командой. Если исправилась только первая строка, а две другие открылись случайно, работа не готова.
Если noindex остался, проверьте другие слои
У приложения может быть правильный тег, а у ответа — закрывающий X-Robots-Tag. Его устанавливают reverse proxy, CDN, middleware или Route Handler. Нужно определить, на каком шаге появляется заголовок. Запрос к локальному серверу и запрос к публичному домену помогут сузить место проблемы, но не всегда покажут все промежуточные настройки хостинга.
Отдельно проверьте, не показывает ли маршрут состояние notFound() из-за сбоя источника данных. Оно способно добавлять noindex независимо от вашего статического объекта metadata. Тогда изменение обычной политики страницы не исправит причину. Посмотрите пример разделения отсутствия и сбоя API.
Google объясняет, что noindex должен быть доступен роботу при обходе, чтобы тот мог его обработать. Закрытие через robots.txt и директива индексации решают разные задачи. Не добавляйте запрет обхода как способ «почистить noindex» — это может мешать увидеть исправление. Документация Google о noindex.
Что записать в задачу и как принять исправление
Хорошая задача содержит URL, найденный тег или заголовок, ожидаемую политику и список соседних маршрутов, которые менять нельзя. Разработчик должен указать источник запрета и показать итоговый ответ после изменения. Пересказ «открыли индексацию» без адреса и результата проверки недостаточен.
Проверьте несколько услуг из разных вложенных разделов. Их политика может отличаться из-за собственных layout или динамического generateMetadata. Затем повторите аудит конкретной страницы и сравните сохранённую директиву с ручным просмотром ответа. Для структуры приложения полезно руководство по Next.js 15.
Удаление noindex не гарантирует появления URL в поиске. После технической приёмки ещё нужны доступность страницы для обхода, корректный canonical, полезное содержание и проверка состояния в панели вебмастера. В акте приёмки подтверждают конкретное исправление директивы, а индексацию наблюдают отдельно по данным поисковой системы.