Техническое 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-тегов <link>?
Да — форма заголовка полностью эквивалентна форме тега и является стандартным способом разметки hreflang для ресурсов, не являющихся HTML (например, PDF), или добавления hreflang к ответу без изменения HTML-шаблона. Действуют те же правила: каждый языковой вариант должен указывать сам себя (самоссылка), а при наличии двух и более вариантов рекомендуется x-default.
Действительно ли Google использует заголовок ответа Link?
Да. Документация Google Search Central прямо указывает HTTP-заголовок как поддерживаемый способ задания как rel="canonical", так и rel="alternate" hreflang, особо отмечая файлы не в формате HTML как причину существования этого механизма.
Сохраняется ли где-либо мой URL или его содержимое?
Нет. Загрузка выполняется на стороне сервера только для этой одной проверки, а результат возвращается напрямую в ваш браузер; ничего не записывается в базу данных или журнал, кроме счётчика ограничения частоты запросов.