С развитием ИИ-поиска (AEO) веб-мастерам стало мало стандартного robots.txt. Поисковые ИИ-агенты (такие как SearchGPT, ChatGPT, Gemini или Яндекс Нейро) требуют структурированный контекст о сайте. Для этого в корень проектов внедряются новые файлы спецификаций — llms.txt и llms-author.txt.
Однако просто создать эти файлы и загрузить их на сервер часто недостаточно. Как только сторонние ИИ-сервисы, аналитические платформы или внешние веб-интерфейсы пытаются прочитать их напрямую через JavaScript-скрипты (Fetch или Axios), они натыкаются на стандартную политику безопасности браузеров — ошибку CORS (Cross-Origin Resource Sharing).
Если сервер запрещает кросс-доменные запросы, внешние системы не могут прочитать файлы спецификаций, и ваш сайт теряет видимость в умных ответах ИИ. Чтобы решить эту проблему, необходимо точечно настроить CORS-заголовки на стороне веб-сервера. Задача — открыть полный доступ к файлам llms.txt и llms-author.txt для любых внешних запросов, но при этом сохранить под замком остальную критическую инфраструктуру сайта.
Настройка CORS на сервере Apache (.htaccess)
Для того чтобы файлы llms.txt и llms-author.txt отдавались сервером без ограничений, нам нужно принудительно добавить заголовок Access-Control-Allow-Origin: *. Но делать это глобально для всего сайта небезопасно. Наша цель — изолировать правила и применить их строго к двум конкретным файлам.
Для этого используется модуль Apache mod_headers и директива FilesMatch. Откройте файл .htaccess в корне вашего сайта и добавьте в него следующий конфигурационный блок:
apache
<IfModule mod_headers.c>
# Открываем CORS-доступ строго для ИИ-спецификаций
<FilesMatch "^(llms\.txt|llms-author\.txt)$">
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, User-Agent"
</FilesMatch>
</IfModule>
Как работает эта конфигурация:
<IfModule mod_headers.c>— сервер проверяет, включен ли модуль обработки заголовков, чтобы избежать критической ошибки 500.<FilesMatch ...>— регулярное выражение четко ограничивает зону действия правил. Сервер среагирует только тогда, когда запрос придет точно наllms.txtилиllms-author.txt. Никакие другие файлы или скрипты в корне сайта под это правило не попадут.Header set Access-Control-Allow-Origin "*"— главный заголовок, который разрешает любым сторонним ИИ-сервисам и скриптам читать содержимое этих файлов без блокировки со стороны браузера.- Ограничение методов — мы разрешаем только безопасные запросы
GET(чтение данных) иOPTIONS(предварительный запрос проверки связи), полностью закрывая возможность отправки скрытых форм или изменения данных (POST,PUT,DELETE).
После сохранения файла .htaccess изменения вступают в силу мгновенно. Перезагружать сервер Apache не требуется.
Настройка CORS на сервере Nginx
На серверах Nginx конфигурация задается внутри блока server в файле конфигурации вашего виртуального хоста (например, /etc/nginx/sites-available/ваш-сайт.conf).
ИИ-краулеры и внешние JS-скрипты перед отправкой основного запроса часто посылают предварительный запрос типа OPTIONS (так называемый preflight-запрос), чтобы проверить, разрешен ли доступ к ресурсу. Если сервер не ответит на него корректно, сам файл прочитан не будет.
Добавьте следующий блок location в конфигурацию вашего сайта:
nginx
# Изолированный блок для файлов ИИ-спецификаций
location ~* ^/(llms\.txt|llms-author\.txt)$ {
# Разрешаем доступ для всех доменов
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
# Обработка предварительного запроса OPTIONS
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
# Кешируем результат preflight-запроса на 20 дней
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
# Проверяем физическое наличие файла, иначе отдаем 404
try_files $uri =404;
}
Разбор важных нюансов для Nginx:
- Регулярное выражение
~* ^/(llms\.txt|llms-author\.txt)$— перехватывает запросы строго к этим двум файлам, регистронезависимо. Запросы к остальным ресурсам идут по своим стандартным правилам. - Параметр
always— гарантирует, что Nginx отдаст CORS-заголовки не только при успешном ответе (200), но и в случае ошибок (например, если файл временно перенесен или недоступен). - Конструкция
return 204— если пришел методOPTIONS, сервер моментально возвращает статус 204 (No Content) вместе с разрешающими CORS-заголовками, даже не пытаясь читать файл с диска. Это экономит ресурсы процессора.
После внесения изменений обязательно проверьте конфигурацию на ошибки командой sudo nginx -t. Если всё в порядке, примените настройки: sudo systemctl reload nginx.
Как проверить, работают ли CORS-заголовки?
Самый надежный способ убедиться, что ИИ-боты смогут прочитать ваши файлы — проверить ответы сервера через обычную консоль или специализированные инструменты (например, внутренний анализатор кодов ответа сервера).
Выполните в терминале команду curl с запросом метода OPTIONS:
curl -I -X OPTIONS https://webindex.su
В ответе сервера вы должны четко увидеть строку:Access-Control-Allow-Origin: *
Если эта строка присутствует, значит, защита сервера настроена ювелирно: ИИ-краулеры получат беспрепятственный доступ к контексту сайта, а остальная часть вашего проекта останется в полной безопасности.












