Мы взяли визовые данные, которыми пользуется полинтернета, и пошли сверять их с законами. Стало хуже

Год назад мы делали обычную вещь: сервис, который отвечает на вопрос «нужна ли мне виза в такую-то страну». Взяли открытый набор данных, прикрутили интерфейс, поехали.

Через несколько месяцев выяснилось, что почти все такие сервисы, включая наш, отвечают на этот вопрос неправильно. И что проверить это никто не пытался — потому что данные ходят по кругу копиями копий.

Вот как устроен круг. Статья в Википедии скрейпится в репозиторий на GitHub, репозиторий — в API, API продают как продукт, продукт цитируют в статьях. Ни у кого в этой цепочке нет ссылки на страницу государственного ведомства. Ошибка, попавшая в начало цепи, живёт годами: её некуда сообщить и негде посмотреть, кто последний раз смотрел на источник.

Мы решили разорвать круг для одной таблицы: 197 паспортов на 197 направлений, 38 612 пар. Ниже — что из этого вышло, включая то, что вышло плохо.

Шри-Ланка: виза по прибытии, которой нет

Начну с собственной ошибки, потому что она самая показательная.

В наших данных почти для всех гражданств стояла «виза по прибытии» в Шри-Ланку. Это была не наша выдумка — так было в исходном наборе, и так же написано у большинства сервисов, которые вы найдёте поиском.

Визы по прибытии в Шри-Ланке нет. Вообще. Управление иммиграции требует, чтобы каждый иностранец получил электронное разрешение ETA до вылета. С мая 2026 для граждан 40 стран оно бесплатное, для остальных платное — но оформляется заранее и там, и там.

Разница между «оформи заранее» и «дадут на границе» кажется бюрократической, пока не окажешься на стойке регистрации. Авиакомпанию штрафуют за перевозку пассажира без права въезда, поэтому документы проверяют они, до вылета, и разворачивают тоже они. Человек с нашим ответом не долетел бы.

Мы исправили это 14 июля 2026 — сразу на всех 196 страницах направления — и добавили проверку в сборку, чтобы значение не вернулось.

Мораль скучная, но важная: ошибка в визовых данных несимметрична. Сказать «нужна виза» там, где не нужна, — стоит человеку денег и нервов. Сказать «не нужна» там, где нужна, — стоит билета.

Малави: одна фраза в вестнике отменила шестьдесят стран

Это история про ошибку, которую невозможно поймать сравнением версий.

2 января 2026 года в Правительственном вестнике Малави вышли Immigration (Amendment) Regulations 2026, Government Notice No. 1. Они заменили Вторую шкалу к правилу 3.

Фокус в том, как она устроена. Новая шкала работает исчерпывающе от обратного: виза нужна гражданам всех стран, кроме перечисленных. А перечислено 22 страны плюс члены SADC и COMESA, у которых подтверждена взаимность, — около 35 всего.

До этого у Малави было примерно 62 безвизовых гражданства и 83 с визой по прибытии.

Список не поменяли. Поменяли логику списка. Дифф по названиям стран показал бы небольшую правку; на деле обнулилось почти всё. Мы сами до этого правили восемь пар руками — лечили симптомы, не понимая диагноза. Полностью заменили только 28 июля: 161 гражданство получает электронную визу, 35 — безвизовый въезд.

Отдельная деталь, которая объясняет, почему это дороже, чем кажется. Формально доступны и электронная виза, и виза по прибытии. Мы показываем электронную — потому что виза по прибытии недоступна пассажирам Категории 1 по классификации самого Департамента иммиграции, а кто в какой категории, публично не сказано. Когда источник даёт две категории прибытия и не говорит, кто в какой, единственный безопасный ответ — тот, что работает для обеих.

Почему «нужна виза или нет» — вопрос без ответа из двух вариантов

Самый частый способ ввести человека в заблуждение — свести всё к бинарности «безвизово или нет».

Мы взяли визовые данные, которыми пользуется полинтернета, и пошли сверять их с законами. Стало хуже

Мы держим шесть значений вместо двух. Спорное из них — ETA, электронное разрешение на въезд: британское ETA, американское ESTA, канадское eTA, будущее европейское ETIAS. Формально страны сами называют это «безвизовым въездом с предварительным разрешением». Мы считаем его отдельной категорией, потому что операционно оно останавливает человека на стойке регистрации ровно так же, как виза.

Человек, которому надо за три дня заполнить форму и заплатить сбор, находится не в том же положении, что человек, который просто садится в самолёт.

Черногория: указ есть, а мы всё равно пишем «безвиз»

Черногория выравнивает визовую политику с ЕС. Для граждан России, Беларуси, Турции и Саудовской Аравии безвизовый въезд заканчивается 1 ноября 2026 года. Останется отдельный маршрут: у кого есть действующая шенгенская, американская, британская или ирландская виза — 30 дней.

Мы знаем это с июля. И до 31 октября всё равно отвечаем «виза не нужна».

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

Это, наверное, единственное место, где я готов согласиться, что можно было решить иначе.

Сколько из этого проверено на самом деле

Теперь неприятная часть.

Из 38 612 пар первичный источник — ссылку на страницу госоргана, с которой значение прочитано — имеют 177. Это 0,46 %.

Мы взяли визовые данные, которыми пользуется полинтернета, и пошли сверять их с законами. Стало хуже

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

Остальные 38 435 строк — базовая матрица, взятая из открытого источника (Passport Index, лицензия MIT) 17 февраля 2026. Мы её не составляли и не приписываем себе. Мы говорим прямо: это пол, от которого мы отталкиваемся, и он не проверен. Аргумент всей затеи в том, что матрицу такого рода нельзя перепубликовывать так, будто её кто-то проверял.

Ещё несколько цифр без прикрас: 38 строк несут дату ручной перепроверки, в журнале изменений 61 запись, автопроверка при каждой сборке сверяет 108 фактов и роняет сборку при расхождении.

Две даты вместо одной

У каждого изменения мы храним две даты: когда правило изменилось и когда человек последний раз перечитал источник и убедился, что оно всё ещё действует.

Сначала была одна — дата изменения. Это оказалось прямо вредно. Правило, изменившееся в 2024 году, выглядит заброшенным через пять минут после того, как его перепроверили. А правило, изменившееся на прошлой неделе, выглядит свежим вечно. Читателю нужно знать не когда закон поменялся, а сколько времени прошло с тех пор, как на него кто-то смотрел.

Исправления мы дописываем в публичный журнал, а не применяем молча. Если строка, от которой вы зависите, изменилась — в журнале написано когда, с чего на что и на каком основании.

Как мы сами себе навредили: 513 400 уведомлений при сайте в 35 920 адресов

Раздел, ради которого, наверное, и стоит читать этот текст.

Есть протокол IndexNow: сайт говорит поисковику «вот этот адрес изменился, перечитай». Bing принял от нас 513 400 таких уведомлений. Адресов на сайте — 35 920. То есть каждый адрес мы объявили изменившимся примерно четырнадцать раз, включая те, которые не менялись никогда.

Как это получилось: полная отправка запускалась руками и ничем не ограничивалась, а признаком «изменилось» служила дата сборки. Собрали сайт — значит, изменились все 36 тысяч страниц.

Починили двумя раздельными правками. Первая: дата изменения теперь считается от хеша содержимого страницы — двигается, только когда двигается текст. Вторая: полная отправка требует явного флага и печатает предупреждение; без флага скрипт отказывается работать и объясняет почему.

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

И чем всё это кончилось в поиске

Честно, потому что вопрос напрашивается.

Google открыл нам окно видимости 10 июля: 175 тысяч запросов сканирования за сутки, до 2 000 показов в день, позиции в районе 34-й. 22 июля окно закрылось за одни сутки — показы упали со 2 000 до 111. К августу — 20 показов в день и ноль кликов за неделю. Сканирование держится на уровне около тысячи адресов в сутки при 36 тысячах адресов на сайте.

При этом 14 000 страниц остаются в индексе, сервер отвечает за 51 миллисекунду, ошибок нет ни одной. Нас находят и хранят. Нас не показывают.

Яндекс просел мягче — минус 69 % против минус 99 % — и сейчас даёт впятеро больше показов, чем Google. Bing вёл себя так же, но на три недели позже: рос до 3 августа, потом за двое суток потерял 97 %.

Три системы сделали одно и то же в три разные даты. Это снимает версию «мы что-то сломали такого-то числа»: трёх поломок в три разные даты с одинаковым профилем не бывает. Похоже на нормальную судьбу молодого домена, на который ссылаются два автоматических скрейпера и больше никто.

Вывод, к которому я пришёл и который мне не нравится: качество данных и техническая аккуратность — необходимое условие, но не достаточное. Можно вычистить hreflang на 11 431 странице, разложить карты сайта по девяти языкам, не иметь ни одного дубля заголовка — и получить двадцать показов в день, потому что домену полгода.

Что мы отдаём наружу

Таблица целиком лежит открыто: CSV, JSON и дескриптор во Frictionless-формате, лицензия CC BY 4.0, DOI на Zenodo. Код, который её собирает, — там же.

Если найдёте ошибку — заведите issue с парой стран и ссылкой на государственную страницу, которая нам противоречит. Ссылки достаточно, объяснять закон не нужно. Особенно интересны ошибки в опасную сторону: если вам сказали, что авторизация не нужна, а на стойке регистрации выяснилось обратное, — это самый полезный баг-репорт, какой мы можем получить.