X-Frame-Options - это HTTP-заголовок ответа сервера, который говорит браузеру, можно ли открывать страницу сайта внутри iframe, frame, embed или object на другом сайте.
Простыми словами: заголовок помогает защитить сайт от кликджекинга - ситуации, когда злоумышленник визуально подсовывает пользователю чужой интерфейс, а действие выполняется на вашем сайте.
Формы, личные кабинеты, страницы оплаты, админки и другие чувствительные интерфейсы.
На уровне сервера, CDN, панели хостинга, CMS или приложения.
Не прямой фактор роста позиций, а часть технической безопасности и доверия к сайту.
Короткий ответ: какой X-Frame-Options ставить
Для большинства обычных сайтов безопасный базовый вариант - SAMEORIGIN.
X-Frame-Options: SAMEORIGIN
Если страницу вообще нельзя встраивать никуда - например, это вход в личный кабинет, платёжная форма или административный раздел - можно использовать DENY.
X-Frame-Options: DENY
Важно: если сайту нужно разрешить встраивание только на конкретных внешних доменах, одного X-Frame-Options обычно недостаточно. Для такой задачи лучше использовать Content-Security-Policy: frame-ancestors.
Как работает защита от кликджекинга
Кликджекинг - это атака на интерфейс. Пользователь думает, что нажимает кнопку на одном сайте, но фактически кликает по скрытому элементу другого сайта, загруженного во фрейме.
Например, поверх обычной кнопки может быть наложена невидимая область с вашей страницей авторизации, подтверждения действия или отправки формы. Если защита не настроена, браузер может разрешить такое встраивание.
Влияет ли X-Frame-Options на SEO
Сам по себе X-Frame-Options не нужно воспринимать как кнопку “поднять позиции”. Поисковые системы не публикуют правило, что один этот заголовок напрямую двигает страницу в ТОП.
Реальное влияние - косвенное. Защищённый сайт реже получает проблемы с подменой интерфейса, вредоносными сценариями, предупреждениями браузера, жалобами пользователей и потерей доверия.
| Фактор | Как связан с SEO | Честный вывод |
|---|---|---|
| HTTPS | Официальный лёгкий сигнал качества у Google. | Нужно внедрять обязательно. |
| Вредоносный код | Может привести к предупреждениям, ограничениям и потере трафика. | Безопасность влияет на видимость через риски. |
| X-Frame-Options | Снижает риск iframe-атак и подмены интерфейса. | Это не “SEO-ускоритель”, а техническая гигиена. |
| CSP | Ограничивает источники загрузки ресурсов и встраивание страниц. | Полезно внедрять аккуратно, чтобы не сломать сайт. |
Вывод: заголовки безопасности не заменяют контент, структуру, коммерческие факторы и аналитику. Но если сайт технически небезопасен, продвижение становится менее устойчивым.
Какие значения X-Frame-Options использовать
| Значение | Что делает | Когда использовать | Риск ошибки |
|---|---|---|---|
DENY |
Запрещает открывать страницу во фреймах полностью. | Админки, платежи, авторизация, личные кабинеты. | Может сломать легальное встраивание. |
SAMEORIGIN |
Разрешает фреймы только внутри того же origin. | Большинство корпоративных сайтов, блогов и интернет-магазинов. | Обычно безопасный базовый вариант. |
ALLOW-FROM |
Должен был разрешать конкретный внешний адрес. | На практике лучше не использовать. | Плохая поддержка браузерами; заменяется CSP frame-ancestors. |
X-Frame-Options или CSP frame-ancestors: что выбрать
X-Frame-Options проще и хорошо подходит как базовая защита. Но он ограничен: у него мало вариантов настройки.
Content-Security-Policy: frame-ancestors гибче. Через него можно указать, какие домены имеют право встраивать страницу.
Когда достаточно X-Frame-Options
- сайт не должен встраиваться на чужих доменах;
- нужна быстрая базовая защита;
- нет сложных внешних интеграций;
- страницы обычные: услуги, блог, каталог, контакты.
Когда нужен CSP frame-ancestors
- часть страниц нужно встраивать на доверенных доменах;
- есть SaaS, виджеты, партнёрские кабинеты;
- нужна более гибкая политика безопасности;
- вы внедряете полноценный набор security headers.
Content-Security-Policy: frame-ancestors 'self';
Как выбрать настройку под тип страницы
| Тип страницы | Рекомендуемый вариант | Почему |
|---|---|---|
| Главная, услуги, статьи | SAMEORIGIN |
Защищает от чужих iframe и обычно не мешает работе сайта. |
| Формы заявок | SAMEORIGIN или DENY |
Зависит от того, используются ли формы внутри внутренних фреймов. |
| Личный кабинет | DENY или строгий CSP |
Здесь выше риск действий от имени пользователя. |
| Виджет, который должен встраиваться у партнёров | CSP frame-ancestors |
Можно разрешить конкретные доверенные домены. |
Как настроить X-Frame-Options
Лучше настраивать заголовки на уровне сервера или CDN. Вариант через WordPress тоже возможен, но он зависит от темы, плагинов, кеширования и порядка отправки заголовков.
Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
Apache / .htaccess
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
PHP
header('X-Frame-Options: SAMEORIGIN');
WordPress через functions.php
Правку лучше вносить в дочернюю тему или через небольшой mu-plugin. Если вставить код в основную тему, обновление темы может удалить изменения.
add_action('send_headers', function () {
header('X-Frame-Options: SAMEORIGIN');
});
Если нужен CSP
Content-Security-Policy: frame-ancestors 'self';
Если сайт работает через CDN, прокси или хостинг-панель, итоговый заголовок нужно проверять снаружи. Иногда сервер отдаёт одно, а пользователь получает другое.
Как проверить, что заголовок работает
1. Через DevTools
Откройте страницу → F12 → Network → выберите документ → Headers → Response Headers.
2. Через curl
curl -I https://site.ru
3. Через онлайн-сервисы
Можно использовать SecurityHeaders или аналоги, но итог всё равно нужно сопоставлять с логикой сайта.
Проверять нужно не только главную страницу. Заголовки могут отличаться на страницах услуг, в блоге, карточках товаров, личном кабинете, PDF и служебных URL.
Частые ошибки при настройке
Ошибка 1. Заголовок есть только на 200 OK
Если не использовать always в Nginx или Apache, заголовок может не передаваться на редиректах, 404 и других ответах.
Ошибка 2. Ставят DENY без проверки интеграций
Иногда сайт легально использует iframe: формы, виджеты, панели, встраиваемые модули. В этом случае жёсткий запрет может сломать функциональность.
Ошибка 3. Конфликтуют X-Frame-Options и CSP
Если одна политика разрешает встраивание, а другая запрещает, поведение может отличаться по браузерам. Настройки должны быть согласованы.
Ошибка 4. Заголовок прописали в WordPress, но CDN его перезаписал
Кеширующие плагины, CDN и прокси могут менять финальные заголовки. Проверять нужно ответ, который реально получает пользователь.
Что должно быть в норме
- На важных страницах есть
X-Frame-Options: SAMEORIGINили обоснованно выбранный CSP. - Для личных кабинетов, оплаты и авторизации используется более строгая политика.
- Нет устаревшей зависимости от
ALLOW-FROM. - Заголовки проверены на главной, коммерческих страницах, статьях и служебных разделах.
- CSP не ломает изображения, стили, скрипты, формы и внешние сервисы аналитики.
- После внедрения проверены заявки, формы, корзина, оплата и вход в админку.
Что спросить у подрядчика перед внедрением
- На каком уровне вы будете добавлять заголовки: сервер, CDN, CMS или приложение?
- Проверите ли вы все типы страниц, а не только главную?
- Какие страницы нельзя встраивать вообще?
- Есть ли у сайта легальные iframe-интеграции?
- Будет ли тест после внедрения: формы, корзина, оплата, аналитика, виджеты?
- Согласованы ли X-Frame-Options и Content-Security-Policy?
Красные флаги
DENY, не выяснив, нужны ли фреймы.ALLOW-FROM как современное решение.Пример плохой и хорошей настройки
Плохой вариант
“Поставили DENY на весь сайт, ничего не проверяли, формы и виджеты потом разберём”.
Риск: можно сломать часть функциональности и не заметить потерю заявок.
Хороший вариант
“Сначала нашли страницы, где iframe не нужен, поставили SAMEORIGIN, отдельно проверили кабинет, формы, оплату, CDN и CSP”.
Итог: защита внедрена осознанно, без поломки бизнес-процессов.
Какие ещё security headers стоит проверить
X-Frame-Options - только один слой защиты. В нормальном техническом аудите обычно смотрят весь набор заголовков и то, как они взаимодействуют между собой.
| Заголовок | Зачем нужен |
|---|---|
| Content-Security-Policy | Ограничивает источники скриптов, стилей, изображений и встраивания страниц. |
| X-Content-Type-Options | Помогает запретить браузеру угадывать MIME-тип ресурса. |
| Strict-Transport-Security | Заставляет браузер обращаться к сайту по HTTPS после первого безопасного посещения. |
| Referrer-Policy | Управляет тем, какие данные о странице-источнике передаются при переходе. |
| Permissions-Policy | Ограничивает доступ к функциям браузера: камере, микрофону, геолокации и другим API. |
Если сайт размещён на хостинге, где нет доступа к настройке заголовков, стоит уточнить поддержку у провайдера. Например, можно посмотреть условия у Beget или у вашего текущего хостинга.
Честный блок: проблема может быть не только в заголовках
Если сайт плохо продвигается или не даёт заявки, security headers редко бывают единственной причиной. Они важны, но сами по себе не исправят слабую структуру, плохой оффер, медленную загрузку, пустые коммерческие страницы или отсутствие аналитики.
В реальном SEO-аудите нужно смотреть связку: техническое состояние, индексацию, структуру страниц, контент, коммерческие факторы, доверие, скорость обработки заявок, сезонность, цены и работу отдела продаж.
По смежным темам можно дополнительно посмотреть:
SEO-продвижение сайта,
SEO для PDF и X-Robots-Tag,
настройку crawl-delay в robots.txt,
hreflang и HTTP-заголовки.
Справочные источники
Для проверки технических деталей полезно смотреть первичные справочники:
MDN по X-Frame-Options,
MDN по CSP frame-ancestors,
web.dev по security headers.
Не уверены, что технические настройки не мешают SEO?
Начните не с случайных правок, а с проверки: какие заголовки отдаёт сайт, нет ли проблем с HTTPS, индексацией, дублями, скоростью, формами и коммерческими страницами.
