Как убрать robots.txt из кэширования в WordPress и отдать его без лишних заголовков кеша

Если /robots.txt в WordPress начал вести себя как обычная страница сайта — кэшируется, не обновляется после правки или отдаётся с заголовками, которые мешают поисковым роботам и отладке, проблему обычно нужно искать не в самом WordPress, а в связке rewrite + кэш-плагин + серверный кеш/CDN.

На практике это проявляется так: вы меняете правила в robots.txt, проверяете файл в браузере, а видите старую версию. Или в ответе есть Cache-Control, Expires, иногда даже Set-Cookie. Для статического файла это не всегда критично, но для robots.txt лучше отдать предсказуемый ответ без лишнего кеширования на уровне прокси и CDN.

Как понять, что проблема именно в кэшировании robots.txt

Сначала проверьте не содержимое файла, а HTTP-ответ. Это быстрее, чем гадать, виноват ли WordPress, nginx, Apache или плагин кеша.

curl -I https://example.com/robots.txt

Смотрите на три вещи:

  • HTTP/1.1 200 или 304 — ответ должен быть стабильным;
  • Cache-Control и Expires — если там длинный TTL, файл может жить в кеше слишком долго;
  • Last-Modified и ETag — они допустимы, но иногда мешают при агрессивном проксировании.

Если у вас включён Cloudflare, nginx fastcgi_cache, LiteSpeed Cache, WP Rocket или другой page cache, проверьте файл и после очистки кеша плагина, и после purge на уровне сервера/CDN. Если версия меняется только после полной очистки, значит, robots.txt попал в кешированный путь.

Что обычно ломает robots.txt в WordPress

1. Правило rewrite перехватывает запрос

WordPress умеет отдавать виртуальный robots.txt, если физического файла нет. Это удобно, но если запрос уходит через кеширующий слой как обычная HTML-страница, он может получить те же заголовки, что и посты.

2. Кеш-плагин не исключает robots.txt

Некоторые плагины кеша по умолчанию не трогают robots.txt, но после ручной настройки, CDN-правил или оптимизаций это исключение может исчезнуть. Тогда файл начинает обслуживаться как статический ресурс с долгим сроком жизни.

3. CDN отдаёт старую версию

Если CDN кэширует /robots.txt, вы можете менять файл на сервере, но внешне видеть старый ответ до истечения TTL или purge.

Пошаговое решение без лишней магии

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

Шаг 1. Создайте физический robots.txt в корне сайта

Если файла нет, WordPress будет генерировать его виртуально. Для предсказуемого поведения лучше положить файл в корень сайта рядом с wp-config.php.

User-agent: *
Disallow:

Sitemap: https://example.com/sitemap_index.xml

Если у вас несколько sitemap, укажите только тот URL, который реально отдаёт ваш сайт. Не добавляйте туда старые адреса «на всякий случай» — это потом сложно отследить в логах и в Search Console.

Шаг 2. Уберите лишние заголовки кеша на уровне сервера

Для Apache можно явно задать отдельные правила для robots.txt в .htaccess. Это не отменяет кеш полностью, но помогает убрать слишком агрессивные заголовки.

<Files                 
⭐⭐⭐⭐⭐