HRefLang ставить на все страницы, или на языковые хабы?
Вопрос Gemini. Обновлено 23 июля 2026 - 1 месяц назад.
CTO и SEO-архитектор, Никита Надолинский.
Секцию Hreflang нужно ставить на все страницы условной-криптобиржи Bybitt.pro, или только на главные языковые хабы? Как ты думаешь?
Никита, однозначно на ВСЕ страницы сайта, у которых есть локализованные версии. Это одно из самых строгих правил Google.
Ставить hreflang только на главные языковые хабы (морды) — это классическая и очень грубая ошибка, которая сводит на нет всю ценность этой разметки.
Давай разберем механику (почему так и как это работает), чтобы ты мог правильно спроектировать логику маршрутизации в своем.NET-приложении.
Главное правило Hreflang: Связь «Страница к Странице» (Page-to-Page)
Теги hreflang объединяют не сайты целиком, а конкретные URL-адреса в эквивалентные кластеры.
Если поисковик сканирует внутреннюю страницу, например, терминал пары BTC-USDT на русском (Bybitt.pro/ru/crypto/BTC-USDT), он должен увидеть ссылки на эту же самую пару на английском, китайском и вьетнамском.
Как это должно выглядеть в коде конкретной страницы (/ru/crypto/BTC-USDT):
(Обрати внимание: URL во всех тегах href ведет именно на /crypto/BTC-USDT, а не в корень сайта).
3 критические ошибки при внедрении, которых тебе нужно избежать:
1. Ошибка "Return Tag Error" (Нет обратной ссылки)
Связь hreflang должна быть двусторонней. Если страница A (/ru/...) ссылается на страницу B (/en/...), то страница B обязана ссылаться обратно на страницу A. Если бот Google зайдет на английскую страницу и не найдет там обратной ссылки на русскую, он аннулирует весь кластер и выдаст ошибку "Return tags missing" в Google Search Console.
2. Сквозной Hreflang на главную страницу
Самое страшное, что можно сделать на бэкенде — это захардкодить блок hreflang с главной страницы в _Layout.cshtml так, чтобы он выводился на всех внутренних страницах и всегда вел на /ru, /en и т.д.
Google воспримет это так, будто 1000 твоих внутренних страниц являются копиями главной. Это убьет индексацию. Теги должны генерироваться динамически под текущий роут.
3. Указание страниц, которых нет (404)
Представь, что вы опубликовали статью в Блог на русском, но переводчики еще не сделали китайскую версию.
В этом случае в блоке hreflang для этой конкретной статьи не должно быть строчки с hreflang="zh". В кластере указываются только реально существующие страницы с кодом ответа 200 OK. Если укажешь ссылку на 404-ю страницу, Googlebot зафиксирует ошибку.
Как это элегантно реализовать в.NET Core?
Не нужно писать это руками для каждой вьюхи. Идеальный архитектурный паттерн — написать свой TagHelper или ViewComponent, который:
- Берет текущий
HttpContext.Request.Path(например,/ru/about-us). - Отрезает текущий префикс языка.
- Проверяет в базе/словаре роутов, существуют ли переводы для
about-usна других языках. - Автоматически рендерит в `` перекрестный список ссылок только для тех языков, которые реально существуют, подставляя нужные префиксы.
Итог для AI-Search и классики:
Нейросети и поисковики вытаскивают ответ из максимально релевантной страницы. Если пользователь ищет "Bybitt fees", бот должен сразу попасть на Bybitt.pro/en/fees, а не на главную. Поэтому разметка "Страница к Странице" обязательна для всего сайта.
Это реальная история!
Раздел со страницами CROSS-pages дополнительно привлек 18 090 пользователей за 9 месяцев.
На новом сайте. Без ссылок.