Перейти к контенту
Neaptidestudio
блог

SEO перед релизом Next.js: проверка на восьми ошибках

Neaptide · 13 октября 2026 г. · 9 мин чтения

Внесли восемь ошибок в стенд Next.js. Небольшой HTTP-скрипт нашёл шесть и пропустил две. Скрипт, данные и повторяемый эксперимент доступны для скачивания.

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

Успешная SEO-проверка перед релизом подтверждает только то, что она умеет наблюдать. 13 октября 2026 года мы проверили небольшой скрипт на восьми намеренно внесённых ошибках в production-сборке Next.js. В каждом из двух проходов он обнаружил шесть ошибок и пропустил две. Исправный контроль не вызвал предупреждений. Два пропуска показывают, зачем в релизном чек-листе нужны отдельные проверки robots.txt и страницы в браузере.

Один контроль, восемь ошибок, два прохода

За основу взяли стенды предыдущих экспериментов с canonical, hreflang и sitemap. В каждом из девяти сценариев были английская и французская карточки товара; в каждый ошибочный сценарий внесли одну проблему. До запросов зафиксировали сценарии, исходники, ожидаемые значения и скрипт. Это локальный эксперимент на Next.js 15.5.22 и React 19.2.6 с искусственными ошибками, а не аудит девяти сайтов.

Скрипт проверяет статус ответа, один ожидаемый canonical, общие директивы noindex, непустой title, наличие H1 в HTML-ответе, точную карту hreflang и адреса из одной sitemap. Требования к title и H1 — условия этого проекта, а не универсальные требования Google к индексации. Ожидания задаются в проверенном файле настроек. Если извлекать их из тестируемой страницы, можно повторно принять ту же ошибку за норму.

Что обнаружено, а что пропущено

LAB-RELEASE-2026-10-13 · Next.js 15.5.22
Сценарий / внесённое изменениеРезультат обоих проходовСигнал в отчёте
C00 · Исправный контрольБез предупрежденийНет
D01 · Canonical указывает на чужой доменОбнаруженоCANONICAL
D02 · В robots meta добавлен noindexОбнаруженоNOINDEX
D03 · Французский hreflang ведёт на отсутствующий маршрутОбнаруженоHREFLANG
D04 · В sitemap добавлен адрес с 404ОбнаруженоSITEMAP_TARGET_STATUS
D05 · У английской страницы нет titleОбнаруженоTITLE
D06 · robots.txt запрещает обход сценарияПропущеноНет
D07 · После гидратации исчезает контент товараПропущеноНет
D08 · В HTTP-заголовок X-Robots-Tag добавлен noindexОбнаруженоNOINDEX
В каждом проходе обнаружены шесть из восьми ошибок, две пропущены. Отдельный исправный контроль не вызвал предупреждений.
6 + 2 = 8 ошибок · контроль отдельно · одинаково в обоих проходах

Основной эксперимент — 18 запусков скрипта и 56 HTTP-ответов. Результаты двух проходов совпали. Затем мы распаковали скачиваемый архив, установили зафиксированные зависимости и отдельно собрали стенд: значения всех проверок совпали ещё в 18 запусках. Повторение подтверждает воспроизводимость, но не превращает восемь выбранных ошибок в репрезентативную оценку качества обнаружения. Скрипт, стенды и проверку подготовил один агент.

Почему успешный отчёт не исключает поломку страницы

В D07 HTTP-ответ содержал заголовок и описание товара. После выполнения JavaScript браузер показывал только сообщение об удалении контента. Проверка H1 прошла: скрипт разобрал ответ, но не исполнял JavaScript. Отсутствие контента мы подтвердили в браузере. Отрисовку Googlebot этот опыт не проверяет.

В D07 контент есть в HTTP-ответе, но исчезает после выполнения JavaScript в браузере. Скрипт проходит проверку; отрисовка Google не проверялась.
Скрипт: успешно · браузер: контента нет · Google не проверялся

В D06 корневой robots.txt запрещал обход сценария. Обычные GET-запросы по-прежнему получали корректные страницы, а скрипт не разбирал robots.txt. Поэтому этот сценарий тоже прошёл. В документации Google отдельно рассматриваются управление обходом, директивы индексации и отрисовка. Ответ 200 без noindex сам по себе не подтверждает доступ Google к нужному контенту и его индексацию.

Как запустить проверку и прочитать отчёт

Скачайте и распакуйте полный комплект. В каталоге fixture выполните npm ci --ignore-scripts, npm run build и npm run start. Оставьте этот терминал открытым. Из корня распакованного комплекта запустите команду ниже. Скрипту достаточно Python 3.9 или новее без сторонних Python-библиотек. Точные проверенные версии среды указаны в README.

python3 check_release.py \
  --origin http://127.0.0.1:8792 \
  --manifest manifests/control.json \
  --out control-check

Код 0 означает, что покрытые условия выполнены; 1 — найдены нарушения; 2 — ошибка входных данных или запуска. Каждый раз используйте новый выходной каталог. Замените control.json на canonical.json, чтобы получить зафиксированную ошибку canonical. Для двух полных проходов выполните python3 collect.py и python3 analyze.py в свежей распаковке.

Этот фрагмент взят из фактического отчёта D01. Полный файл также содержит успешные проверки, сохранённые ответы и список непроверяемых областей.

{
  "passed": false,
  "findings": [
    {
      "code": "CANONICAL",
      "url": "http://127.0.0.1:8792/canonical/en/product",
      "passed": false,
      "observed": [
        "https://wrong.example/product"
      ],
      "expected": [
        "http://127.0.0.1:8792/canonical/en/product"
      ]
    }
  ]
}

Для своего проекта замените пример настроек проверенным списком важных маршрутов и ожидаемых значений. Скрипт обращается только к заданному origin, не следует редиректам и поддерживает один sitemap urlset, до 100 явно заданных страниц и 30 адресов из sitemap. Он не проверяет качество перевода и все связи hreflang. Сложные правила X-Robots для отдельных роботов, индексы sitemap и поведение браузера не входят в проверенный охват.

Что добавить в процесс выпуска

Используйте отчёт как одно из доказательств при решении о релизе. Ниже — предлагаемый порядок работы, а не экспериментально подтверждённая политика выпуска. На тестовом окружении авторизация или noindex могут быть намеренными. Задавайте ожидания для каждой среды, не снимая защиту ради успешного отчёта.

Что добавить в процесс выпуска
ЭтапОтветственный / проверкаЧто сохранить
До релизаРазработчик и SEO-специалист согласуют маршруты, canonical и доступные переводыВерсия настроек, исключения и сравнение с прошлой сборкой
Кандидат на релизHTTP-проверка, отдельный разбор robots и просмотр важных страниц после JavaScriptJSON-отчёт, результат проверки robots, видимый контент и ссылки
После выкладкиПовторить на публичных адресах; при наличии доступа изучить изменения в Search Console и аналитикеПубличные ответы и отрисовка; реальные данные индексации и показателей с датами

Скрипт, стенд и данные исследования

Выбранные искусственные сценарии не дают оценки обнаружения ошибок на реальных сайтах, не заменяют полный аудит и не доказывают предотвращение потерь трафика. Отсутствие сигналов относится только к этому контролю. Индексацию Google, позиции, заявки и цитирования ИИ мы не измеряли. Частотность запроса не определялась. Вывод ограничен этой версией скрипта и стендами.

Для повторения сохранены старые фиксированные версии зависимостей. При чистой установке аудит сообщил о трёх предупреждениях безопасности. Стенд предназначен для localhost согласно инструкции, а не для рабочего сайта. Перед адаптацией кода проверьте актуальные предупреждения зависимостей.

частые вопросы

Коротко о главном

Успешная проверка означает, что Google может проиндексировать страницу?

Нет. Скрипт читает HTTP-ответы и файл ожидаемых значений. Он не выполняет JavaScript, не разбирает robots.txt и не проверяет индекс Google. Два пропущенных дефекта показывают, почему эти задачи остаются отдельными.

Можно использовать скрипт в CI?

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