Как отключить заголовок X-Powered-By в WordPress

Заголовок X-Powered-By часто появляется не из WordPress, а из PHP, веб-сервера или прокси. На практике он не помогает SEO и редко нужен на публичном сайте, зато лишний раз раскрывает стек и версию среды. Если задача — убрать лишнюю техническую информацию из ответов сервера, делать это нужно аккуратно: сначала понять источник, потом выбрать способ отключения.

Когда это действительно проблема

Сначала проверьте, где именно заголовок добавляется. На одном хостинге его отдаёт PHP, на другом — Nginx или Apache, а иногда он приходит уже после CDN. Из-за этого попытка убрать его только в functions.php может ничего не дать.

Как быстро диагностировать источник

Проверьте ответ сервера из консоли или через инструменты разработчика:

curl -I https://example.com

Если в ответе есть строка вида X-Powered-By: PHP/8.2.10, значит заголовок отдаёт PHP или конфигурация сервера. Если заголовок не исчезает после правки WordPress, ищите настройку на уровне хостинга, PHP-FPM, Nginx, Apache или CDN.

Полезно также сравнить ответы для главной страницы и админки. Иногда заголовок убирается только на фронтенде, а в /wp-admin/ остаётся из-за другой цепочки обработки запроса.

Рабочие способы отключения

Универсального способа для всех серверов нет. Ниже — варианты, которые реально применяются в WordPress-проектах.

1. Отключить заголовок на уровне PHP

Если у вас есть доступ к php.ini, .user.ini или настройкам хостинга, это самый чистый вариант. Для PHP 8.x обычно достаточно отключить экспонирование версии:

; php.ini или .user.ini
expose_php = Off

После этого PHP перестаёт добавлять X-Powered-By в ответ. Но учтите: на некоторых хостингах изменение вступает в силу не сразу, а через несколько минут или после перезапуска PHP-FPM.

2. Снять заголовок на уровне WordPress

Если доступ к конфигам сервера ограничен, можно добавить фильтр в тему или мини-плагин. Это не всегда сработает, если заголовок уже добавлен ниже по стеку, но попробовать стоит.

<?php
add_action( 'send_headers', function () {
    if ( headers_sent() ) {
        return;
    }

    header_remove( 'X-Powered-By' );
} );

Этот вариант полезен, когда заголовок добавляется PHP, но ещё не был отправлен клиенту. Если после внедрения он остался в ответе, значит источник не в WordPress.

3. Убрать заголовок в Nginx или Apache

На сервере это надёжнее, чем правка темы. Для Nginx обычно используют скрытие заголовка от upstream, если ответ идёт через PHP-FPM или прокси:

fastcgi_hide_header X-Powered-By;

В Apache иногда помогает настройка через Header, если модуль mod_headers включён:

Header unset X-Powered-By

Но такие изменения нужно делать только там, где вы понимаете цепочку обработки запроса. На общем хостинге без доступа к конфигам этот путь может быть недоступен.

4. Если стоит CDN или прокси

Иногда заголовок появляется уже после WordPress, например на стороне прокси. Тогда его нужно убирать в панели CDN или на edge-уровне. Проверяйте не только origin-сервер, но и финальный ответ, который видит браузер.

СпособКогда подходитМинус
PHP expose_php = OffЕсть доступ к настройкам PHPНе всегда доступно на shared-хостинге
header_remove() в WordPressНужно быстро убрать заголовок без доступа к серверуМожет не сработать, если заголовок добавлен раньше
Nginx/ApacheЕсть доступ к конфигам сервераТребует понимания стека

Пошаговое решение без лишнего риска

Если нужен практический порядок действий, идите так:

  1. Проверьте ответ curl -I и зафиксируйте, где именно виден X-Powered-By.
  2. Посмотрите, есть ли доступ к настройкам PHP в панели хостинга.
  3. Если доступ есть, отключите expose_php.
  4. Если доступа нет, добавьте header_remove() через мини-плагин или mu-plugin.
  5. После этого повторно проверьте ответ сервера и кэш CDN, если он используется.

Для мини-плагина удобнее не трогать тему. Создайте файл, например wp-content/mu-plugins/remove-powered-by.php:

<?php
/**
 * Plugin Name: Remove X-Powered-By header
 */
add_action( 'send_headers', function () {
    if ( ! headers_sent() ) {
        header_remove( 'X-Powered-By' );
    }
} );

mu-plugins хороши тем, что такой код не отключится случайно после смены темы или обновления обычного плагина. Но если у вас уже есть серверное решение, дублировать его в WordPress не нужно.

Как проверить, что заголовок действительно исчез

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

  • Выполните curl -I https://example.com и убедитесь, что строки X-Powered-By нет.
  • Проверьте ответ в DevTools во вкладке Network.
  • Если есть CDN, очистите его кэш и повторите проверку из инкогнито.
  • Сравните заголовки до и после изменения на одном и том же URL.

Если заголовок исчез только на части страниц, значит у вас разные обработчики на фронтенде и в админке, либо часть ответов отдаётся из кэша.

Частые ошибки и как их исправить

Правят только functions.php и ждут результата

Это работает не всегда. Если заголовок добавляет PHP до загрузки WordPress или на уровне сервера, код темы не поможет. В таком случае нужен доступ к конфигу PHP или веб-сервера.

Путают X-Powered-By с Server

Это разные заголовки. X-Powered-By обычно показывает технологию, а Server — веб-сервер или прокси. Убирать оба можно, но способ будет разный.

Меняют конфиг, но не проверяют кэш

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

Отключают заголовок в одном месте, а потом обновление всё возвращает

Так бывает на хостингах с автогенерацией конфигов. Если панель хостинга пересобирает настройки, лучше использовать поддерживаемый способ: отдельный .user.ini, настройки PHP в панели или серверный шаблон, который не перезаписывается.

Что учесть по безопасности и производительности

Скрытие X-Powered-By не делает сайт защищённым само по себе. Это скорее косметическое уменьшение лишней информации. Реальные меры безопасности — обновления ядра, плагинов и темы, ограничение лишних API-эндпоинтов, нормальные права на файлы и контроль логинов.

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

Если нужен более широкий аудит технических дублей и лишних элементов, в экосистеме WordPress часто используют инструменты вроде Clearfy Pro: он помогает убирать часть технического шума и наводить порядок в настройках сайта. Но для конкретно X-Powered-By всё равно важнее источник на уровне PHP или сервера.

В итоге задача решается не одним «магическим» кодом, а проверкой цепочки ответа. Сначала найдите, кто добавляет заголовок, потом уберите его в правильном слое и перепроверьте результат тем же запросом, с которого начинали.

Как создать автоматический импорт данных из Excel в WordPress с примерами кода
27.09.2026
WordPress отладка и логирование ошибок: практическое руководство
27.09.2026
Как установить и настроить Redis кэш в WordPress для ускорения сайта
28.09.2026
Как запретить индексацию старых отладочных страниц в WordPress через noindex и robots.txt
21.09.2026
Как закрыть от индексации вложения изображений в WordPress
07.10.2026