Глибше
Чому так стається
На головній — коротка версія: сайти за замовчуванням віддають російську, навіть коли ви просили українську. Довша версія — це купа дрібних збоїв, де кожен сам по собі має пояснення, але разом вони складаються в той самий результат. Ця сторінка проходить весь стек — що запитує ваш браузер, що декларує сторінка, що вгадує детектор, що показує пошуковик, що з вашим вибором роблять двомовні сайти, і як власники сайтів переносять цей результат у бюджети наступного року.
01
Детектори мов вгадують за літерами
Вони не читають сторінки — вони обирають мову, чий тренувальний корпус має найбільше збігів за n-грамами. Для кирилиці це російська.
- Великі детектори — CLD2 і CLD3, fastText, плюс власні варіанти пошуковиків — натреновані на корпусах, де російський веб приблизно у три-чотири рази більший за український. Неоднозначний вхід відкочується до більшого корпусу.
- Короткі запити нижчі за поріг впевненості детектора. Запит з одного-двох слів — наприклад, «новини» чи «погода» — не несе достатньо сигналу, щоб перебити початкове припущення. А для кирилиці це припущення — російська.
- Українська та російська ділять більшість службових слів, чимало лексики й майже всю абетку. Сторінка, де переважають спільні токени — картка товару, меню навігації, футер, — за замовчуванням класифікується як мова з більшим корпусом.
- Сторінки зі змішаними мовами зводяться до одного ярлика. Українська стаття з російською секцією коментарів читається цілісно і отримує тег «російська»; українська картка товару серед російських відгуків — те саме.
- Транслітерований контент випадає з кириличного детектування взагалі. Українські імена латинкою — Volodymyr, Kyiv, Lviv — читаються як англійська. Як і будь-яка українська латинкою чи романізована в URL-адресах.
02
Сторінки декларують свою мову — і помиляються
HTML має стандартні способи позначати мову. Більшість сайтів або пропускають їх, або заповнюють неправильно, або суперечать самі собі в різних механізмах.
- <html lang="ru"> на сторінці, яка насправді українською — найчастіший випадок. Зворотне — українська розмітка на російському змісті — трапляється приблизно так само часто. Movar спочатку читає атрибут, а коли значення виглядає ненадійним, запускає власне визначення.
- Вкладені атрибути lang на одній сторінці суперечать одне одному. Українська оболонка, що огортає <div lang="ru"> з основним контентом — формально коректна розмітка, але марна для будь-якого правила рівня сайту, якому потрібна одна відповідь.
- <link rel="alternate" hreflang> вказує на URL-адреси, у яких <html lang> однакові — кожен «альтернативний» варіант декларує ту саму мову. У Movar є захист від циклів редиректів саме через цей шаблон; без нього розширення ганялося б за власним хвостом по зламаному графу hreflang.
- og:locale, og:locale:alternate та meta http-equiv="Content-Language" зазвичай суперечать одне одному й <html lang>. Якому сигналу довіряє конкретний скрапер, той і перемагає.
- inLanguage зі Schema.org та xhtml:link rel="alternate" у sitemap декларують, що українська версія існує. Відкриваєш URL — а тіло сторінки досі російською: CMS публікує запис до того, як виконається переклад.
- <title> і <h1> сторінки — однією мовою, тіло — іншою. Google індексує заголовок; читачі читають тіло.
03
Транспортний шар ігнорує те, що запитує ваш браузер
Ваш браузер з кожним запитом надсилає Accept-Language: uk. Більшість серверів цього не враховують.
- Багато серверів читають лише перші два символи Accept-Language, ігнорують q-параметр або враховують заголовок лише при першому зверненні — а потім кешують це рішення для всього сеансу.
- CDN кешують відповіді лише за URL. Варіант, який отримав перший відвідувач — зазвичай російський, бо ринок більший, — потім дістається всім іншим, у кого збігається ключ кешу.
- Geo-IP перебиває заголовок. Браузер з налаштуванням «українська» у закордонній мережі отримує російську, незважаючи на заголовок. Браузер з налаштуванням «російська» всередині України — навпаки. Жодна з двох поведінок не збігається із заявленою.
- Застарілі теги локалі ru-UA лишаються в старіших інсталяціях і профілях акаунтів. Одні сервери трактують їх як російську, інші як українську; обидві відповіді помиляються приблизно в половині випадків.
- Кука, виставлена одним випадковим кліком, перебиває кожен Accept-Language, який ви надсилаєте потім. Кука живе довше за вибір, який її поставив, — часто роками.
04
Пошуковики тримають мову на трьох окремих осях
Мова інтерфейсу, мова результатів і визначена мова запиту — це три різні налаштування. Всі три мають збігтися, перш ніж ви надійно отримаєте українські результати.
- У Google hl= керує мовою інтерфейсу, тоді як lr= і cr= фільтрують результати. Налаштування одного не зрушує іншого. Визначена мова запиту — третя вісь поверх обох.
- Картка-довідка — та, що стоїть поряд із результатами — формується з найактивнішої Вікіпедії для відповідної сутності. Зазвичай це англійська або російська, незалежно від мови інтерфейсу. Українська Вікіпедія менша, тому картка відкочується до більшого джерела.
- У Wikidata є багатомовні мітки для більшості сутностей, але картка користується ними лише вище певного порогу кількості редакторів. Нижче порогу — відкат до англійської чи російської, а українська мітка лишається без діла.
- YouTube тримає мову інтерфейсу, мову запиту й мову рекомендацій як три незалежні сигнали. Поставити інтерфейс на українську ще нічого не каже системі рекомендацій про те, що саме рекомендувати.
- Україномовний індекс структурно менший за російський. Ранжування частково відносне — російський результат із середніми сигналами може обійти український із тими самими сигналами просто тому, що його корпус щільніший.
05
Двомовні сайти за замовчуванням ведуть на більший ринок
Сайти, що мають і українську, і російську версію, все одно за замовчуванням видають російську — а шлях до української рідко буває очевидним.
- Російський варіант сидить на кореневій URL-адресі. Українська версія живе за /uk/, /ua/ або на окремому піддомені. Клік по результату пошуку — і ви на російській.
- Перемикач захований у футері, за гамбургер-меню чи під значком прапора, який легко пропустити. Більшість відвідувачів його ніколи не знаходить.
- Кука вибору живе тільки в межах одного піддомену. Перейти з www.example.com на shop.example.com — і вибір скидається.
- Налаштування привʼязане до акаунта користувача. Гостьовий перегляд — а саме він складає більшість трафіку — за кожним відвідуванням повертається до замовчування.
- Інсталяції CMS розходяться. Українська версія перекладу відстає від російського оригіналу на тижні, тому відвідувач, що потрапив на українську за замовчуванням, бачить застарілий контент і сам перемикається на російську версію. Власники сайтів читають отриману аналітику і роблять висновок, що читачі хочуть саме російської.
06
Сторінка — це не весь досвід
Навіть українська сторінка приходить загорнутою в речі, які сама сторінка не може перекласти.
- Зображення несуть неперекладений текст — банери, інфографіка, креатив реклами, скриншоти продукту. Жодного механізму рівня сторінки, щоб перевернути їх, немає; кожне зображення — окреме рішення, яке сторінка не приймає.
- Вбудовані плеєри — відео з YouTube, картки Twitter, кліпи Spotify, Vimeo, SoundCloud — не успадковують мову батьківської сторінки. Кожне вбудування робить власний вибір зі своїх сигналів.
- Магазини мобільних застосунків в українських локалях віддають російські описи й скриншоти, навіть коли в самому застосунку є українська локалізація. Сторінка в магазині застосунків публікується окремо від самого застосунку.
- Транзакційні листи, push-сповіщення й розсилки нерідко ігнорують мовне налаштування сайту й користуються тією мовою, яка була за замовчуванням під час створення акаунта.
- Alt-текст і ARIA-мітки лишаються тією мовою, на якій вони були записані, навіть коли сторінка перекладена. Користувачі скрін-рідерів отримують з тієї самої сторінки іншу мову, ніж зрячі.
07
Економіка тече назад у технологію
Усе це мало б бути невидимим для власників сайтів. Але це не так — і цикл стискається сам.
- Аналітика повідомляє, що «більшість читачів обрала російську». Рішення приймав не читач, а сам сайт. Сигнал, з якого виростають інвестиції наступного року, — це попередня поведінка самого сайту, а не реальний вибір користувача.
- Машинно перекладені українські версії читаються погано, тож користувачі надають перевагу російському оригіналу — і це похибка виживання, яку метрики трактують як уподобання.
- Налаштування операційної системи за замовчуванням — інсталяції Windows в Україні, які приходили з російською, мобільні пристрої, налаштовані до того, як українська стала опцією інтерфейсу — просочуються в кожен сигнал вище й рідко скидаються.
- У підсумку утворюється зворотний цикл. Менша україномовна аудиторія цьогоріч веде до меншої кількості українського контенту в замовленнях наступного року. Менше контенту — менший індекс. Менший індекс — детектори й ранжувальники нахиляються до російської ще сильніше за замовчуванням. Більше замовчувань — менша україномовна аудиторія наступного року. Цикл крутиться сам.
Що Movar може, а чого не може
Movar може виправити те, що відбувається у вашому браузері: запит, який надсилає браузер, адресу, яку ви відвідуєте, параметри, додані до пошуку, перемикач мови, який Movar уже знає для конкретного сайту. Він не може правити закешовані відповіді CDN, виправляти мовні теги в неправильно класифікованих статтях Вікіпедії, перекладати тексти на зображеннях чи переписувати економіку. Але правильні механіки на рівні браузера — передумова для всього іншого: поки сигнал від окремих читачів не буде чистим, ніхто нижче по ланцюгу не зможе його прочитати.