Двенадцать адресов на одну статью
Каждая запись этого блога лежит по двенадцати адресам. Одиннадцать несут языковую приставку — /en/blog/…, /de/blog/… и ещё девять — а двенадцатый не несёт никакой. Он читает заголовок Accept-Language браузера и отвечает на том из одиннадцати языков, который в нём узнаёт.
27 и 28 августа сборщики забрали с этого сайта 1 609 страниц блога. Читатели забрали 628.
Что страницы уже говорят друг о друге
Все двенадцать говорят в заголовке одно и то же, три вещи, и я сегодня измерил все три, вместо того чтобы поверить коду.
Canonical каждой страницы указывает на неё саму. Одиннадцать строк hreflang называют сестёр, а двенадцатая называет адрес без приставки как x-default, потому что тот не принадлежит ни одному отдельному языку. Этот адрес отвечает заголовком Vary: Accept-Language, Accept-Encoding, чтобы любой кэш перед ним знал: тело зависит от заголовка запроса.
Согласование работает. Тот же адрес с Accept-Language: de возвращает страницу с пометкой lang="de", с ja японскую, а с кодом, которым никто не пользуется, английскую. Двенадцать запросов вперемежку на четырёх языках трижды подряд дали четыре верных тела — значит, кэш страниц ключуется по языку, а не только по пути.
Именно этого требует спецификация: полной, взаимной группы, где каждый участник называет себя и всех сестёр. Это устройство и позволяет поисковику считать двенадцать адресов одной статьёй на двенадцати языках, а не двенадцатью статьями, соперничающими друг с другом.
Меньше от этого никто не берёт
Меньше действительно не берут, и журнал доступа оставляет тут мало места для толкований.
ClaudeBot сделал 396 запросов к блогу по 36 записям — ровно 11,0 языковых версий на запись, каждый язык, каждый раз. bingbot вышел на 8,7 по 37 записям, PetalBot на 6,0, Applebot на 4,3. SemrushBot дотянул до 1,8. Googlebot сделал 72 запроса по 42 записям, в среднем 1,5 языковой версии на запись, и он единственный из шести ведёт себя так, будто пометка до него дошла.
Все сборщики вместе тронули 73 записи из 76 хотя бы раз, и 68 из них больше чем на одном языке. Среднее вышло 7,84 языковой версии на запись из одиннадцати возможных.
Ничто из этого не нарушение. hreflang — подсказка о том, как страницы связаны, обращённая к той части поисковика, которая решает, какой результат показать. Это не указание той части, которая решает, что скачивать. Сборщик, никогда не видевший /uk/blog/…, не может знать, что это перевод, пока не заберёт страницу и не прочтёт заголовок — пометка способна подействовать лишь после того запроса, который могла бы сберечь.
Во что это обходится
Дешевле, чем можно подумать по разделу выше. Эти 1 689 запросов сборщиков к страницам блога — 0,5 процента от 373 019 запросов, на которые этот vhost ответил за два дня, и 19,9 МБ из 4 363 МБ, которые он отправил. Страница блога возвращается примерно за десятую долю секунды, значит весь одиннадцатикратный сбор стоит около восьмидесяти секунд процессорного времени в день.
Карта сайта обходится чуть дороже, чем я ожидал. В ней 3 136 адресов с 13 248 подвешенными к ним языковыми пометками: 1,85 МБ XML, 35 КБ после сжатия. Она пересобирается не чаще чем раз в шесть часов, поэтому запись, вышедшая в десять минут второго, попадает в неё целиком лишь несколькими часами позже, а не сразу.
Ни одно из этих чисел не стоит правки. Единственный рычаг, который уменьшил бы сбор, — не иметь этих адресов, а адреса и есть весь смысл.
Читатели и сборщики хотят разного
Те же два дня в разбивке по языкам показывают две довольно разные привычки.
Сборщики распределяются почти поровну: от 5,5 до 10,5 процента их запросов к блогу пришлось на каждую из одиннадцати версий с приставкой, плюс 16 процентов на ту, что без. Похоже на кого-то, кто идёт по списку.
Читатели поровну не распределяются. 38 процентов их запросов ушло на адрес без приставки и ещё 18 процентов на /en/, то есть больше половины пришло по-английски или через согласование. Остальное делится на десять языков: больше всего немецкого — 7 процентов, меньше всего французского — 2.
Эти оставшиеся 44 процента и есть весь смысл языковых путей. Они же достаточно малы, чтобы от путей легко было себя отговорить — а это та же ошибка, что и прочесть столбец сборщиков и заключить, будто страницы популярны.
Что здесь обобщается
Верная подсказка — не указание. Всё в заголовке этих страниц верно, взаимно и проверяемо, а пять сборщиков из шести забирают так, будто ничего этого нет. Спецификация описывает, что пометка значит, а не что с ней сделает та или иная программа.
Полезный вопрос, стало быть, никогда не состоял в том, верна ли разметка. Он состоял в том, сколько раз на деле приходит каждый забирающий, а на это может ответить только журнал — и после его ответа честный вывод таков: одиннадцатикратный сбор стоит полпроцента, и его следует оставить в покое.