РКН Аудит РКН Аудит

политика 152-ФЗ ст.18.1 SPA техническая доступность

Политика конфиденциальности рендерится JavaScript-ом: почему проверяющий видит пустую страницу

· 5 мин чтения · Редакция РКН Аудит

Если сайт сделан как одностраничное приложение, а текст политики обработки персональных данных подставляется JavaScript-ом уже в браузере, вы попадаете в неприятную ситуацию: живой посетитель документ видит, а любой простой HTTP-клиент получает по этому адресу пустой каркас без содержания. Так работают часть поисковых роботов и средства автоматизированного мониторинга. Формально по адресу что-то есть, фактически подтвердить наличие политики нельзя — а часть 2 статьи 18.1 152-ФЗ требует обеспечить именно возможность ознакомиться с документом. Ответственность идёт по части 3 статьи 13.11 КоАП РФ: для юридических лиц 30 000–60 000 ₽, наш сканер показывает как потолок 60 000 ₽. Хорошая новость в том, что чинится это точечно: переделывать сайт целиком не нужно, достаточно вынести одну страницу. Разбираем, в чём именно разница между тем, что видит браузер и что видит программа, как проверить свой сайт за минуту и какие есть варианты решения.

Проверьте, видна ли ваша политика простому HTTP-клиенту — бесплатно ←


Что происходит технически

Обычная страница приходит к посетителю уже готовой: сервер отдаёт HTML, в котором текст политики лежит прямо в разметке. Одностраничное приложение устроено иначе. Сервер отдаёт короткий документ-каркас — как правило, несколько строк разметки и подключение скриптов. Дальше работу делает браузер: выполняет JavaScript, запрашивает содержание отдельно и вставляет его в страницу. Человек видит результат и не догадывается, что первый ответ сервера был пустым.

Теперь посмотрите на то же самое глазами программы, которая просто запрашивает адрес и читает ответ. Она получает каркас. Скрипты она не выполняет — либо потому, что не умеет, либо потому, что это дорого делать в массовом обходе. В её представлении по адресу политики нет ни слова про обработку персональных данных.

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

Почему это риск, даже если посетители всё видят

Часть 2 статьи 18.1 152-ФЗ говорит о неограниченном доступе к документу. Спорить о том, обеспечен ли доступ, когда текст появляется только после выполнения скриптов в конкретном браузере, — заведомо неудобная позиция: доказывать придётся вам, а исходное впечатление проверяющей стороны будет «политики по ссылке нет».

Есть и вторая, более приземлённая сторона. Ровно та же механика ломает индексацию: страница, у которой в исходном HTML нет текста, попадает в поисковую выдачу хуже. Наконец, за этой же проблемой обычно тянутся соседние — если политика собирается на клиенте, то и текст согласия рядом с формой, и ссылка на политику из чекбокса нередко существуют только после выполнения скриптов. Как автоматизированная проверка вообще смотрит на сайт, разобрано в материале «Как бот РКН сканирует сайты».

Норма и сумма

  • Требование: часть 2 статьи 18.1 152-ФЗ — политика опубликована, доступ к ней не ограничен.
  • Ответственность: часть 3 статьи 13.11 КоАП РФ (редакция, действующая с 30.05.2025): граждане — 1 500–3 000 ₽, должностные лица — 6 000–12 000 ₽, ИП — 10 000–20 000 ₽, юридические лица — 30 000–60 000 ₽.
  • Потолок в отчёте сканера: 60 000 ₽.

Это тот же состав, что и при полностью недоступной странице политики, и та же квалификация, что при её отсутствии. Разница только в причине: там страница сломана, здесь — отдаётся без содержания.

Как проверить свой сайт за минуту

  1. Откройте страницу политики в браузере.
  2. Нажмите Ctrl+U (или выберите в меню «Просмотр кода страницы» / «View page source»). Важно: не «Инспектор» и не «Просмотреть элемент» — они показывают уже собранную браузером страницу и всегда выглядят нормально. Нужен именно исходный код ответа сервера.
  3. В открывшемся окне нажмите Ctrl+F и поищите характерную фразу из своей политики: «персональных данных», «оператор», название вашей компании.
  4. Нашли — содержание отдаётся сервером, всё в порядке.
  5. Не нашли, а сам код состоит из пары десятков строк и списка подключаемых скриптов — текст подставляется на стороне браузера, и проблема подтверждена.

Дополнительная проверка для тех, кто дружит с командной строкой: запросите адрес политики любым консольным HTTP-клиентом и посмотрите тело ответа. Результат должен быть тем же самым — текст политики виден в ответе.

Как исправить, не переделывая сайт

Вариант 1 — статическая HTML-страница. Самый простой и надёжный: положите политику отдельным HTML-файлом по адресу вроде /privacy.html или /politika-obrabotki-pdn.html и ведите ссылку из футера на него. Приложение при этом не трогается вообще. Для документа, который меняется раз в год, отдельная статическая страница — вполне нормальное решение, а не костыль.

Вариант 2 — серверный рендеринг для одного маршрута. Современные фреймворки позволяют включить отдачу готового HTML для отдельных страниц, не меняя режим работы остального приложения. Если такая возможность в вашем стеке есть, включите её для маршрута политики: результат — сервер отдаёт страницу с текстом сразу.

Вариант 3 — предварительная генерация. Страница собирается один раз на этапе сборки и дальше отдаётся как обычный статический файл. Подходит документам, которые почти не меняются, — политика как раз такой.

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

Что заодно стоит проверить на SPA

  • Текст согласия рядом с формой — он тоже часто подставляется скриптом. Если содержания нет в исходном HTML, автоматическая проверка форму «не увидит».
  • Ссылка на политику из подписи чекбокса — должна быть обычной ссылкой, а не обработчиком клика на скрипте.
  • Полнота самой политики. Технически исправленная страница должна ещё и содержать все обязательные разделы — сверьтесь с шаблоном политики обработки персональных данных.
  • Отдельный адрес. У политики должен быть собственный адрес, который открывается прямым переходом, а не только кликом внутри приложения.

Короткий итог

Проблема не в фреймворке и не в качестве вашего сайта, а в том, что содержание доезжает не до всех. Одна страница, вынесенная в статический HTML или отданная с серверным рендерингом, снимает риск по части 2 статьи 18.1 152-ФЗ, попутно улучшает индексацию и стоит несколько часов работы разработчика. Проверить результат можно самому за минуту — просмотром исходного кода страницы.

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

У меня всё открывается в браузере. Почему сканер говорит, что политики нет?

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

Это нарушение или техническая мелочь?

Это риск по части 2 статьи 18.1 152-ФЗ: норма требует обеспечить возможность неограниченного доступа к тексту политики, а доказательством выполнения на практике служит именно то, что видит обращающаяся сторона. Ответственность — по части 3 статьи 13.11 КоАП РФ: для юрлиц 30 000–60 000 ₽, наш сканер показывает потолок 60 000 ₽. Спор о том, «виден» ли текст, который отдаётся только после выполнения скриптов, лучше не доводить до проверки: техническая правка дешевле.

Как проверить это за минуту без разработчика?

Откройте страницу политики и нажмите «Просмотр кода страницы» (Ctrl+U в большинстве браузеров) — это показывает именно исходный HTML, а не итоговый результат. В открывшемся окне поиском по тексту (Ctrl+F) найдите характерную фразу из своей политики, например «персональных данных». Если фраза нашлась — всё в порядке. Если исходный код состоит из нескольких строк и подключаемых скриптов, а текста нет — страница собирается на стороне браузера.

Придётся переписывать весь сайт?

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

Помогает ли карта сайта или отдельная ссылка в футере?

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

У нас страница отдаётся из кеша CDN — это считается серверным рендерингом?

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

Проверьте свой сайт на нарушения 152-ФЗ

Бесплатный скан за 30 секунд. 14 типов нарушений 152-ФЗ.

Запустить →

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