Техническое SEO

Проверка SEO-заголовка HTTP Link

Введите URL. Мы загрузим его на стороне сервера и разберём HTTP-заголовок ответа Link на предмет записей rel="canonical", rel="alternate" hreflang и rel="next"/"prev" согласно RFC 8288 — затем сверим их с HTML-тегами <link> на той же странице и укажем на любое несоответствие.

Защищено reCAPTCHA. Мы загружаем URL на стороне сервера (с защитой от SSRF) и читаем только его заголовки ответа — ничего не сохраняется.

Почему заголовок Link имеет значение

Почти все инструменты проверки canonical и hreflang смотрят только на HTML-теги <link> в <head> страницы. RFC 8288 определяет второе, столь же полноценное место для объявления тех же сигналов: HTTP-заголовок ответа Link:. Google явно документирует и учитывает его, WordPress и многие CDN отправляют его автоматически, и это единственный способ задать canonical или hreflang для ресурса, не являющегося HTML — PDF, изображения, ответа JSON API, — потому что у таких ресурсов вообще нет <head>, куда можно было бы поместить тег <link>. Поскольку нигде не отображается ничего, заголовок, установленный edge-правилом CDN и молча расходящийся с HTML-тегом, или PDF, для которого никто не подумал задать canonical таким способом, остаются полностью невидимыми и в браузере, и в любом инструменте, читающем только HTML.

Что проверяет этот инструмент

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

Разбор заголовка Link по RFC 8288

Разбирает исходное значение заголовка Link: — включая несколько записей, разделённых запятыми, параметры в кавычках и многозначные списки rel — в структурированные записи rel=canonical, rel=alternate и rel=next/prev, отмечая любой сегмент, который не разбирается как корректное link-value.

Конфликт canonical: заголовок против HTML

Сравнивает цель rel="canonical" из заголовка с HTML-тегом <link rel="canonical"> страницы. Несовпадение — реальная и незаметная проблема: поисковые системы могут учитывать любой из сигналов, из-за чего canonicalization становится непредсказуемой. Также отмечает наличие более одного canonical в заголовке, цель на другом домене и то, ссылается ли он сам на себя (на загруженный URL).

Hreflang через заголовок

Проверяет языковой код каждой записи заголовка rel="alternate"; hreflang="...", отмечает отсутствие x-default при 2 и более записях, отсутствие записи, ссылающейся на саму себя, и дублирующиеся коды, указывающие на разные URL — а затем сверяет весь набор с HTML-тегами hreflang страницы на предмет конфликта.

Покрытие ресурсов, не являющихся HTML

Для PDF, изображения или ответа API (без HTML, поэтому теги <link> в принципе невозможны) отмечает случай, когда canonical в заголовке вообще не был отправлен — то есть у ресурса нет никакого сигнала canonicalization для поисковых систем, а это очень легко упустить из виду.

Часто задаваемые вопросы

Что такое HTTP-заголовок Link и почему мой сайт может его отправлять?

Это заголовок ответа, определённый RFC 8288, который несёт те же отношения на основе rel (canonical, alternate, next, prev и другие), что обычно записываются как HTML-теги <link>, — с той разницей, что он работает для любого ответа, HTML это или нет. Ядро WordPress автоматически отправляет некоторые заголовки Link; многие CDN и обратные прокси могут вставлять или переписывать их на границе сети, иногда без ведома исходного сайта.

Canonical в заголовке отличается от моего HTML-тега canonical — это баг?

Почти всегда да. Собственная документация Google утверждает, что оба сигнала действительны, но не гарантирует, какой из них победит при расхождении — на практике это просто делает canonicalization этого URL непредсказуемой. Проверьте, не вставляет ли CDN, слой кеширования или плагин заголовок независимо от вашего HTML-шаблона, и приведите оба значения в соответствие.

Могу ли я использовать hreflang вообще без HTML-тегов &lt;link&gt;?

Да — форма заголовка полностью эквивалентна форме тега и является стандартным способом разметки hreflang для ресурсов, не являющихся HTML (например, PDF), или добавления hreflang к ответу без изменения HTML-шаблона. Действуют те же правила: каждый языковой вариант должен указывать сам себя (самоссылка), а при наличии двух и более вариантов рекомендуется x-default.

Действительно ли Google использует заголовок ответа Link?

Да. Документация Google Search Central прямо указывает HTTP-заголовок как поддерживаемый способ задания как rel="canonical", так и rel="alternate" hreflang, особо отмечая файлы не в формате HTML как причину существования этого механизма.

Сохраняется ли где-либо мой URL или его содержимое?

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