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

Многоязычный сайт, который всех уводит в один язык

Языковые версии могут существовать, иметь hreflang и переключатель — и при этом каждая внутренняя ссылка возвращает читателя в основной язык. Разбор собственной ошибки с цифрами до и после и способ проверить это у себя.

2 сентября 2026 г.
7 мин чтения

Языковую версию сайта обычно проверяют так: открывают главную, переключают язык, видят переведённый текст и закрывают вкладку. Проверка пройдена. На самом деле она только что не состоялась — потому что всё важное начинается со второго клика.

Первого сентября 2026 мы разбирали собственный сайт после вопроса, который звучал просто: почему с русской страницы услуги ссылки ведут на украинские адреса. Ответ оказался длиннее вопроса. Причин было пять, лежали они в разных местах кода, и ни одна не была видна на первом экране.

Как это видит читатель

Возьмём русскую страницу услуги. Сверху стандартные хлебные крошки:

Главная  →  Razrabotka  →  Internet magaziny  →  страница

Два дефекта в трёх словах. Во-первых, название собрано из латинского сегмента адреса вместо слова «Разработка» — выглядит как машинный недосмотр, и это именно он. Во-вторых, и это хуже, ссылка ведёт на адрес без языкового префикса. Такой страницы не существует: сервер отдаёт 404.

То есть читатель, дошедший до нужной страницы и решивший подняться уровнем выше — ко всей категории услуг, — попадал в пустоту. На каждой из 237 опубликованных страниц услуг, в двух языковых версиях каждая.

Дальше в теле страницы: блок «читайте также», карточки смежных услуг, кнопка перехода в портфолио, подсвеченные термины в тексте. Мы посчитали на одной странице — 12 ссылок, все 12 вели на украинские адреса. Читатель, пришедший на русскую версию и начавший ходить по сайту, после первого же клика оказывался в украинской и больше из неё не выходил.

Почему этого годами не видно

Здесь работают сразу три вещи.

Ничто не ломается. Ссылка на чужой язык — это рабочая ссылка. Страница открывается, отдаёт 200, выглядит нормально. Мониторинг молчит, ошибок в консоли нет, автотест на битые ссылки проходит.

Разработчик проверяет на основном языке. По-украински всё правильно — именно этот язык и есть основа, из которой строились адреса. Дефект включается только тогда, когда в адресе появляется префикс.

Аналитика показывает норму. Люди ходят по сайту, страницы просматриваются. То, что русскоязычный посетитель за два клика оказался в украинском разделе, в отчётах не отмечается никак — это тот же сайт, те же просмотры.

Пять причин одного симптома

Вот что мы нашли, когда пошли по коду.

Крошки брали сегменты из адреса как есть. На странице /ru/razrabotka/... первый сегмент — razrabotka, и код честно строил из него ссылку /razrabotka. Украинский адрес — /rozrobka, поэтому получалось 404. Та же строка шла в название кнопки: карта переводов ключуется украинскими слагами, razrabotka там не находился, и название собиралось из слага с заглавной буквы.

Дерево услуг переводило адрес, но не добавляло префикс. Здесь было почти правильно: слаг переводился, internet-magaziny вместо internet-magazyny. Не хватало /ru в начале — и ссылка шла на редирект вместо целевой страницы.

Карточки списков брали украинский адрес осознанно. В коде стояло обращение к полю с украинским слагом — не опечатка, а решение, принятое когда-то для одноязычного сайта и пережившее его.

Блок «читайте также» не получал переведённых адресов вообще. Самое коварное из пяти: логика была уже исправлена, но выборка из базы не включала колонку с локализованными слагами. Код запрашивал перевод, получал пустоту и честно откатывался на украинский адрес. После исправления остальных мест именно здесь изменилось лишь пять ссылок из четырнадцати — и это был единственный намёк, что что-то осталось.

Автоматическая подсветка терминов была одноязычной. Механизм, находящий в тексте названия технологий и делающий из них ссылки, хранит украинские адреса целей. На русской странице слово «OpenCart» вело в украинский раздел.

Отдельным пунктом — hreflang. На хабах категорий он объявлял адреса, которые сами отдают редирект. То есть поисковой системе сообщалось: «английская версия этой страницы лежит вот здесь», а по тому адресу стояло перенаправление на другую. Google это переживёт, но сигнал испорчен, и в документации прямо сказано, что указывать нужно конечный адрес.

Что это значит для поиска

Без преувеличений. Это не история о потерянных позициях — о позициях вообще честно говорить нельзя, и никакая цифра здесь не будет доказательной.

Механизм другой и проще. Поисковая система оценивает языковую версию прежде всего по тому, самодостаточна ли она: есть ли у неё собственные внутренние ссылки, можно ли по ней ходить, не вываливаясь в другой язык. Когда каждый выход с русской страницы ведёт в украинскую, робот получает ровно то же, что видит читатель — тупик. Страницы второго языка становятся листьями без веток.

Вторая часть цены — обход. Ссылка на адрес с редиректом тратит запрос робота впустую. Ссылка в 404 — тем более. На сайте из двух-трёх страниц это не имеет значения. На нескольких сотнях это уже заметная доля обхода, потраченная ни на что.

Третья, самая простая: читатель. Человек, выбравший язык и через два клика читающий другой, делает очевидный вывод о сайте.

Как проверить это у себя за полчаса

Метод, который сработал у нас, намеренно примитивен: он смотрит на готовый HTML и ничего не знает о намерениях кода. Именно поэтому он трижды показал нам, что «исправлено» на самом деле означало «почти».

Берёте адрес с языковым префиксом и считаете ссылки, в которых этого префикса нет:

curl -s https://ваш-сайт.com/ru/какая-то-страница \
  | grep -o 'href="/[^"]*"' \
  | grep -v 'href="/ru' \
  | sort -u

В выводе будет три вида адресов.

Первый — то, что там и должно быть: переключатель языков, файлы, внешние ресурсы. Переключатель обязан вести на другие языки, это его работа. Мы на этом споткнулись: первый прогон показал дефекты на всех типах страниц, и половина «дефектов» оказалась переключателем. Отличать его нужно по атрибуту hreflang в том же теге.

Второй — страницы, у которых языковой версии нет вообще. У нас это семь форм-опросников для клиентов. Добавить им префикс означало бы отправить человека в 404, поэтому они остались украинскими осознанно, и это нормальное решение, а не недосмотр.

Третий — собственно дефекты.

Повторите это для каждого типа страницы, а не для каждой страницы: главная, раздел, подраздел, карточка, список, статья, форма. Типов обычно десяток-полтора, и каждый сделан отдельным шаблоном, поэтому дефект в одном ничего не говорит о другом. У нас из тринадцати типов чистыми оказались шесть — но узнали мы это только потому, что проверили все тринадцать.

Отдельно проверьте крошки — это самая дешёвая проверка из всех:

curl -s -o /dev/null -w "%{http_code}\n" https://ваш-сайт.com/адрес-из-крошки

И hreflang — каждый объявленный адрес должен отдавать 200, а не 301 или 308:

curl -s https://ваш-сайт.com/страница | grep -o 'hreflang="[^"]*" href="[^"]*"'

Что получилось

До начала работы: 224 разных адреса, на которые вели ссылки с языковых версий в чужой язык. После: семь, и все семь — те же формы без перевода.

Одиннадцать типов страниц из тринадцати стали полностью чистыми. Крошки отдают 200 вместо 404 и пишутся словами языка страницы. hreflang ведёт на конечные адреса.

Цифры намеренно о работе, а не о результате. Что из этого выйдет в поиске — будет видно через несколько недель в Search Console, и именно туда мы будем смотреть. Обещать рост под такую правку нельзя: она убирает потерю, а не добавляет спроса.

Честные границы

Это не работа, которую стоит начинать, если языковая версия у вас формальная — переведена машинно и никому не нужна. Тогда дешевле её убрать, чем лечить перелинковку.

Это также не даёт ничего одноязычному сайту. И не заменяет перевода: страница, соединённая правильно, но написанная чужим языком, остаётся чужой.

И главное, чего эта проверка не делает: она не объясняет, почему дефект появился. У нас пять причин лежали в пяти разных файлах, написанных в разное время разными руками. Найти их помог не аудит кода, а тупой перебор готового HTML — и именно его мы оставили в проекте как постоянную проверку после каждого изменения в навигации.

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

Теги

SEO

🤔Вам понравилась статья?

Ваше мнение помогает нам создавать лучший контент

Поделитесь с друзьями

Нашли что-нибудь полезное? 🚀

Помогите другим узнать это — поделитесь статьей в социальных сетях

https://lionex.com.ua/blog/bagatomovnyj-sajt-vnutrishni-posylannya

💚 Спасибо, что помогаете нам расти

Владислав Чистяков

Пише про те, що робить руками: інтернет-магазини на OpenCart, застосунки на Next.js, інтеграції та швидкість сайтів. У статтях — заміри й перевірки, які читач може повторити на своєму проєкті, а не загальні поради. Комерційна розробка з 2015 року.

Частые вопросы

Ответы на популярные вопросы по теме

Нет. Hreflang сообщает поисковой системе, что версии существуют и как они соотносятся. Со ссылками внутри страницы он не делает ничего. У языковой версии может быть безупречный hreflang и при этом ни одной собственной внутренней ссылки — именно такой случай мы и разбирали.

Оставлять ссылку на исходном языке. Добавить языковой префикс к странице, которой не существует, значит отправить человека в 404 — это хуже ссылки на другой язык. У нас таких осталось семь, и это осознанное решение, а не недосмотр.

Честный ответ — неизвестно, и тот, кто назовёт процент, тоже не знает. Правка убирает потерю: робот перестаёт упираться в тупик и тратить обход на редиректы и 404. Превратится ли это в трафик, зависит от содержания страниц и спроса, а не от перелинковки.

После каждого изменения в навигации — меню, хлебные крошки, карточки, блоки «читайте также». Дефект такого типа не вызывает ошибок и не ломает сборку, поэтому автоматические проверки его не видят. Заметен он только в готовом HTML.

Получайте лучшие статьи на почту

Подпишитесь на нашу рассылку и получайте полезные советы, инсайты и новости о веб-разработке, маркетинге и бизнесе.

Мы уважаем вашу конфиденциальность. Отписаться можно в любой момент.

Похожие статьи

Все статьи
Волатильность выдачи: как отличить апдейт Google от собственной поломки
Техническое SEO

Волатильность выдачи: как отличить апдейт Google от собственной поломки

Суточные показы нашего сайта за август прыгали от 55 до 579, а недельные суммы росли ровно: 421 → 858 → 2 127 → 2 250. Разбор собственных данных и метод из пяти шагов, которым мы отделяем колебания поиска от ошибки на сайте.

8 мин
4 сент.
Читать дальше
Карточка товара глазами Google: что мы увидели в 30 магазинах
Техническое SEO

Карточка товара глазами Google: что мы увидели в 30 магазинах

8 августа 2026 мы открыли товарные страницы тридцати живых магазинов и посмотрели на них не как покупатель, а как поисковый робот. Разметка Product нашлась у десяти, характеристики — у четырёх. Разбор того, что из этого следует.

7 мин
2 сент.
Читать дальше
Техническая база рынка: что мы нашли в 39 магазинах
Техническое SEO

Техническая база рынка: что мы нашли в 39 магазинах

Седьмого и восьмого августа 2026 мы сняли снаружи технические показатели живых магазинов и сайтов услуг: canonical, карты сайта, разметку, первый ответ сервера, версию PHP. Это не плохой рынок — это база, с которой конкурирует каждый новый магазин.

8 мин
2 сент.
Читать дальше