/tool/hreflang-checker/ работает обходит сервер
Дайте адрес любой языковой версии — остальные инструмент найдёт по её же разметке и обойдёт сам. На каждой посмотрит код ответа, canonical, noindex и запрет в robots.txt, разберёт теги link и заголовок Link, сверит коды языка с настоящими списками ISO и покажет, какие связи подтверждены с двух сторон, а какие нет. Если разметка лежит в карте сайта — дайте адрес карты: разберём её вместе с тегами xhtml:link, а индекс карт пройдём по частям.
Один адрес на входе. Остальные версии инструмент найдёт сам и сходит на каждую.
Строка — страница набора, столбец — код языка. В клетке видно, есть ли ссылка и подтверждена ли она с той стороны.
Строка на каждую претензию — к странице или к отдельной ссылке. У перенаправлений можно раскрыть цепочку целиком.
| Страница | Код языка | Куда ведёт | Что не так | Ответ |
|---|
Вставьте адрес любой языковой версии и нажмите «Проверить набор». Остальные версии инструмент возьмёт из её же разметки — из тегов link и из заголовка Link, которого в исходном коде страницы не видно вовсе.
Читайте матрицу по строкам. Строка — это страница и всё, что она заявляет о наборе. Крестик значит, что ссылка ведёт не туда: ответ не 200, перенаправление, noindex или несуществующий код языка.
Разберитесь со стрелками. Стрелка — односторонняя связь: A называет B своей парой, а B про A молчит. Подтвердить такую связь некому, и поисковая система вправе её не учитывать.
Загляните в столбец ответа в таблице замечаний. У ссылок на 301 нажмите «цепочка» — покажем все шаги с кодами и конечный адрес: в hreflang положено указывать именно его.
Скачайте CSV и отдайте разработчику. В нём страница, код языка, адрес, код ответа, взаимность и замечание — по строке на каждую ссылку набора.
Разметка лежит в карте сайта — идите во вкладку «Карта сайта или список» и дайте её адрес. Карту разберёт сервер, как XML: теги xhtml:link при таком разборе не теряются. Индекс карт пройдём по частям. Проверки те же, что для страниц, а коды ответа спросим отдельной кнопкой — чтобы запросы не тратились молча.
Если сайт за паролем или в закрытом контуре, наш сервер туда не попадёт. Тогда вкладка «Вставленный код»: проверки те же, только данные приносите вы.
Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.
По адресу русской версии инструмент забирает страницу и находит три ссылки. Дальше идёт по ним и забирает две остальные версии — вставлять их руками не нужно.
У каждой версии смотрит код ответа, canonical, meta robots, заголовок X-Robots-Tag и запрет в robots.txt. Все три отвечают 200 и открыты.
Каждая версия ссылается на себя: у русской это ru, у английской en, у немецкой de. В матрице это ромбы по диагонали.
Русская и английская называют немецкую своей парой, немецкая перечисляет только себя и английскую. В строке немецкой версии на месте столбца ru стоит точка, а в строке русской в столбце de — стрелка.
Односторонняя связь одна: https://example.com/de/ не ссылается обратно на https://example.com/. Плюс замечание — x-default не задан ни на одной версии, запасного варианта у поисковика нет.
Адрес, который вы ввели, и адреса версий, нашедшихся в его разметке. Страницы и карты сайта открывает наш сервер — браузеру чужой домен закрыт политикой одного источника. Ничего из проверенного не сохраняется: ни в базе, ни в файле. Ограничитель — триста обращений в час с одного адреса, он общий на все инструменты сайта, и остаток показан под итогом.
Каждая версия — отдельный запрос, и двадцати хватает почти любому набору. Потолок можно поднять до пятидесяти или опустить. Если версий больше, дайте адрес карты сайта: она приходит одним запросом и приносит разметку сразу для всех перечисленных адресов.
Карту заберёт сервер и разберёт как XML. Это важно: при разборе как HTML пропадает пространство имён, а вместе с ним и все теги xhtml:link — вся языковая разметка карты. Сжатую .gz распакуем. Если по адресу оказался индекс карт, пройдём по его частям — по запросу на каждую. Дальше проверки те же, что для страниц: коды языка по спискам ISO, взаимность, x-default, матрица. Коды ответа, canonical и noindex у самих адресов спросим только по кнопке: это уже по запросу на адрес, и тратить их молча нечестно.
Чаще всего да, и мы про это скажем отдельной строкой: сколько всего адресов в карте и у скольких есть xhtml:link. В матрицу попадают только те, у кого разметка есть, — остальным сверять нечего. Если языковых версий у страницы действительно нет, всё в порядке; если есть, а тегов нет, набор для неё не объявлен.
Все три. Теги link в head приносит сервер, заголовок Link разбирается из ответа (в исходном коде страницы его нет, и именно про него забывают чаще всего), карта сайта читается по своему адресу или из вставленного текста. Если на одной странице встретились сразу два способа, инструмент об этом скажет: поисковик увидит оба набора, а держаться нужно одного.
Потому что canonical сильнее hreflang. Если английская версия объявляет каноническим адресом русскую, поисковик выбрасывает английскую из индекса вместе со всей её разметкой языковых версий. Набор при этом выглядит безупречно и не работает. Каждая версия должна быть канонической сама себе.
Да. Набор описывает группу версий целиком, и каждая версия входит в собственный набор. Если страница перечисляет соседей, но не себя, набор считается неполным.
Версия для тех, чей язык не совпал ни с одной из перечисленных. Обычно ею делают страницу выбора языка или основную версию сайта. Тег необязательный, но без него у поисковой системы нет запасного варианта. Двух разных x-default в одном наборе быть не должно.
По спискам, а не по форме. Язык сверяется с ISO 639-1, письменность — с ISO 15924, страна — с ISO 3166-1 alpha-2, числовой регион — с UN M.49. Поэтому en-UK не проходит (страна называется GB), en-EU не проходит (Евросоюз не страна), en_US не проходит (разделитель — дефис), а US в одиночку не проходит потому, что это код страны, а не языка.
Адреса сравнивались строка в строку, и https://example.com/ против https://example.com считались разными страницами. Теперь перед сравнением адрес приводится к одному виду: протокол, www, конечный слэш, регистр домена, порт по умолчанию и проценты в пути. Если различие только в этом, связь засчитывается, а замечание остаётся отдельной строкой.
Связь версий подтверждается с двух сторон. Если A называет B своей парой, а B про A молчит, никто не мешает произвольному сайту объявить себя вашей языковой версией. Поэтому одностороннюю связь поисковая система вправе не учитывать.
Переключить подпись обозревателя. По умолчанию мы представляемся Googlebot: именно его ответ важен для hreflang. Часть сайтов эту подпись закрывает, потому что запрос идёт не с адресов Google. Выберите «Компьютер, Chrome» и проверьте ещё раз.
Показывает весь путь от адреса до конечной страницы и коды ответа.
Открыть
Строит дерево заголовков страницы и находит пропущенные уровни.
Открыть
Пишет title и description и сразу показывает, как это выглядит в выдаче.
Открыть