InfraFenceInfraFence

Live Security Operations

Commencer

Comment bloquer les crawlers d'IA sur votre serveur

Dernière mise à jour:

Les entreprises d'IA parcourent le web pour entraîner leurs modèles, alimenter la recherche par IA et récupérer des pages quand un utilisateur pose une question à leur sujet. Sur un petit serveur, la charge seule peut poser problème, et beaucoup de propriétaires de sites ne veulent pas que leur contenu serve à l'entraînement.

Il existe quatre outils, et ils donnent le meilleur d'eux-mêmes ensemble : robots.txt pour les crawlers qui le respectent, des règles sur le user agent dans le serveur web pour ceux qui s'annoncent, le DNS inverse ou les listes d'IP publiées pour distinguer un vrai crawler d'un faux, et la limitation de débit pour tout le reste. Les commandes sont pour nginx et Apache sur Debian, Ubuntu et la famille RHEL.

Savoir à quels crawlers vous avez affaire

Les principaux, en octobre 2026, d'après la documentation de chaque opérateur. Certains sont des crawlers ; d'autres ne sont que des jetons robots.txt qui contrôlent l'usage des données collectées par un autre crawler.

NomOpérateurCe qu'il fait
GPTBotOpenAICollecte du contenu susceptible de servir à entraîner les modèles d'OpenAI. Liste d'IP publiée.
OAI-SearchBot, ChatGPT-UserOpenAILa recherche de ChatGPT, et les pages récupérées à la demande d'un utilisateur. OpenAI indique que robots.txt peut ne pas s'appliquer à ChatGPT-User.
ClaudeBot, Claude-SearchBot, Claude-UserAnthropicEntraînement, recherche, et pages récupérées pour un utilisateur. Anthropic indique qu'ils respectent robots.txt. Liste d'IP publiée.
Google-ExtendedGoogleUniquement un jeton robots.txt, sans user agent propre : il contrôle l'usage pour l'entraînement et le grounding de Gemini. Il n'a pas d'effet sur la recherche Google.
Applebot-ExtendedAppleUniquement un jeton robots.txt : il contrôle l'usage de ce que collecte Applebot pour l'entraînement des modèles d'Apple.
CCBotCommon CrawlConstruit le jeu de données Common Crawl, très utilisé pour entraîner des modèles. Vérifiable par DNS inverse.
meta-externalagentMetaCollecte pour des usages comme l'entraînement de modèles d'IA.
PerplexityBot, Perplexity-UserPerplexityLa recherche de Perplexity, et les pages récupérées pour un utilisateur. Perplexity indique que Perplexity-User ignore en général robots.txt.

Décidez selon l'usage. Bloquer les crawlers d'entraînement tient votre contenu à l'écart des futurs jeux d'entraînement ; bloquer aussi la recherche par IA et les récupérations pour un utilisateur retire votre site de ces réponses, et des visites qu'elles amènent. Pour voir lesquels atteignent votre serveur, comptez les user agents dans le log d'accès :

nginx (format de log combined)
sudo awk -F'"' '{print $6}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

Leur demander de rester à l'écart avec robots.txt

Placez un robots.txt à la racine de chaque hôte que vous voulez couvrir (chaque sous-domaine a le sien). Plusieurs lignes User-agent peuvent partager une même règle :

robots.txt
User-agent: GPTBot
User-agent: ClaudeBot
User-agent: CCBot
User-agent: Google-Extended
User-agent: Applebot-Extended
User-agent: meta-externalagent
Disallow: /

Cette liste bloque l'entraînement et laisse la recherche tranquille. Ajoutez OAI-SearchBot, Claude-SearchBot et PerplexityBot pour rester aussi en dehors de la recherche par IA. Gardez en dessous vos règles existantes pour les autres crawlers, et n'écrivez jamais User-agent: * avec Disallow: /, sauf si vous voulez aussi disparaître de Google et de Bing.

Ce que robots.txt ne peut pas faire

  • C'est une demande. Les crawlers qui le respectent s'arrêtent ; les autres non, et rien ne vous dit lesquels sont lesquels.
  • Les récupérations déclenchées par un utilisateur peuvent ne pas l'appliquer, de l'aveu même de leurs opérateurs.
  • Les modifications prennent du temps : les opérateurs mettent le fichier en cache, souvent jusqu'à une journée.
  • Un scraper qui cache son nom ou se fait passer pour un navigateur n'est pas concerné du tout.

Bloquer par user agent dans nginx ou Apache

Le serveur web peut refuser les crawlers qui s'annoncent. Cela les arrête même s'ils ignorent robots.txt, tant qu'ils gardent leur nom.

nginx

Le map va dans le contexte http : les fichiers de /etc/nginx/conf.d/ y sont inclus par les paquets de Debian, d'Ubuntu et de la famille RHEL.

Toutes distributions
sudo tee /etc/nginx/conf.d/ai-crawlers.conf > /dev/null <<'EOF'
map $http_user_agent $ai_crawler {
    default 0;
    ~*(GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) 1;
}
EOF

Ajoutez ensuite ceci dans chaque bloc server qui doit les refuser, dans /etc/nginx/sites-available/ sur Debian et Ubuntu ou /etc/nginx/conf.d/ sur la famille RHEL :

Dans chaque bloc server { }
if ($ai_crawler) {
    return 403;
}

Testez la configuration, rechargez et vérifiez : le premier curl doit afficher 403, le second 200 (remplacez example.com par votre site).

Toutes distributions
sudo nginx -t && sudo systemctl reload nginx
curl -s -o /dev/null -w "%{http_code}\n" -A "GPTBot/1.2" https://example.com/
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Attention: Gardez des motifs exacts. Un motif comme bot ou Google bloque aussi Googlebot et Bingbot, et votre site sort des moteurs de recherche. Google-Extended et Applebot-Extended ne sont pas des user agents : leur place est uniquement dans robots.txt.

Apache

Avec mod_rewrite, dans chaque <VirtualHost> (celui du port 80 comme celui du port 443) ou dans le .htaccess du site. Les règles de réécriture de la configuration principale ne s'appliquent pas aux virtual hosts.

Dans chaque <VirtualHost> ou .htaccess
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (GPTBot|ClaudeBot|CCBot|meta-externalagent|PerplexityBot) [NC]
RewriteRule ^ - [F]
Debian / Ubuntu
sudo a2enmod rewrite
sudo apachectl configtest && sudo systemctl reload apache2
RHEL, Rocky Linux, AlmaLinux, Oracle Linux, Fedora
sudo apachectl configtest && sudo systemctl reload httpd

Remarque: Dans .htaccess, les règles demandent AllowOverride FileInfo (ou All) pour ce répertoire. Sur un hébergement mutualisé, c'est généralement déjà le cas.

Vérifier les vrais robots par DNS inverse

N'importe qui peut envoyer User-Agent: Googlebot. Les scrapers le font pour passer les règles qui autorisent les moteurs de recherche. Un vrai crawler se confirme par un DNS inverse confirmé dans le sens direct : l'adresse se résout en un nom dans le domaine de l'opérateur, et ce nom se résout à son tour vers la même adresse.

Debian / Ubuntu
sudo apt install -y bind9-host
RHEL, Rocky Linux, AlmaLinux, Oracle Linux, Fedora
sudo dnf install -y bind-utils
Toutes distributions
ip=66.249.66.1
name=$(host "$ip" | awk '/pointer/ {print $NF; exit}' | sed 's/\.$//')
echo "$name"
host "$name" | awk '{print $NF}' | grep -qxF "$ip" && echo "confirmed" || echo "NOT confirmed"
  • Googlebot : googlebot.com ou google.com. Bingbot : search.msn.com. Applebot : applebot.apple.com. CCBot : crawl.commoncrawl.org.
  • Un nom dans un autre domaine, ou qui ne se résout pas vers l'adresse de départ, est un faux.

OpenAI, Anthropic, Perplexity et Common Crawl publient plutôt les plages d'adresses de leurs crawlers en JSON (les liens se trouvent dans la documentation de chaque opérateur). Ce script vérifie une adresse par rapport à une telle liste :

Toute distribution avec Python 3
python3 - 20.171.207.10 https://openai.com/gptbot.json <<'EOF'
import ipaddress, json, sys, urllib.request
ip = ipaddress.ip_address(sys.argv[1])
req = urllib.request.Request(sys.argv[2], headers={"User-Agent": "Mozilla/5.0"})
prefixes = json.load(urllib.request.urlopen(req))["prefixes"]
nets = [ipaddress.ip_network(p.get("ipv4Prefix") or p.get("ipv6Prefix")) for p in prefixes]
print("in the list" if any(ip in n for n in nets) else "NOT in the list")
EOF

Ces mêmes listes JSON peuvent être chargées dans un bloc geo de nginx ou dans le pare-feu, si vous voulez n'autoriser que les vrais crawlers qui utilisent un nom donné.

Limiter le débit des crawlers

Une limitation de débit fonctionne quel que soit le nom que se donne un crawler, et protège le serveur de ceux qui crawlent trop vite. Dans nginx, cette configuration limite chaque adresse dont le user agent ressemble à un robot à 30 requêtes par minute, avec une courte rafale ; les autres visiteurs ne sont pas comptés, car une clé vide n'est pas limitée.

Toutes distributions
sudo tee /etc/nginx/conf.d/bot-limit.conf > /dev/null <<'EOF'
map $http_user_agent $bot_key {
    default "";
    ~*(bot|crawler|spider|scraper) $binary_remote_addr;
}
limit_req_zone $bot_key zone=bots:10m rate=30r/m;
limit_req_status 429;
EOF

Puis, dans les blocs server ou location des pages dynamiques, et rechargez comme plus haut :

Dans un bloc server { } ou location { }
limit_req zone=bots burst=10 nodelay;

Attention: Derrière un CDN ou un proxy, chaque requête vient de l'adresse du proxy : configurez d'abord set_real_ip_from et real_ip_header, sinon la limite s'applique à tous les visiteurs ensemble. Les moteurs de recherche ralentissent quand ils reçoivent des 429 : gardez donc un débit généreux.

Apache n'a pas de limite de requêtes par adresse en natif (mod_ratelimit limite la bande passante). Les options habituelles sont mod_evasive, une jail fail2ban sur le log d'accès, ou nginx ou un CDN placé devant.

Quand un crawler ignore tout

Si un crawler ignore robots.txt et change de user agent, bloquez au pare-feu les adresses qu'il utilise (remplacez la plage d'exemple) :

Debian / Ubuntu avec ufw
sudo ufw insert 1 deny from 198.51.100.0/24
Famille RHEL avec firewalld
sudo firewall-cmd --permanent --zone=drop --add-source=198.51.100.0/24
sudo firewall-cmd --reload

Comment InfraFence gère les crawlers d'IA

La gestion des robots d'InfraFence lit les logs d'accès du serveur web et reconnaît environ 1 500 robots grâce à des listes publiques mises à jour chaque jour. Les crawlers d'IA forment une catégorie à part.

  • Pour chaque catégorie, ou pour un robot précis, vous choisissez : autoriser, journaliser seulement ou bloquer. Les modifications arrivent sur vos serveurs en quelques secondes.
  • Chaque robot est accompagné d'une explication en langage clair : qui l'exploite, à quoi il sert (entraînement, recherche, assistant, agent) et s'il déclare respecter robots.txt.
  • Quand un robot réglé sur bloquer apparaît dans le log, son adresse est bannie au pare-feu. Le bannissement part du log : la requête qui l'a révélé a donc déjà reçu sa réponse.
  • Les robots qui se présentent comme un moteur de recherche ou un autre crawler connu, comme Googlebot, Bingbot ou Applebot, sont vérifiés par DNS inverse confirmé dans le sens direct, et les faux sont signalés comme usurpés.
  • Les requêtes qui ressemblent à un robot sans correspondre à aucun robot connu sont signalées comme robots inconnus.

Les crawlers d'IA sont reconnus à leur user agent. Un scraper qui cache son nom est laissé au pare-feu web, qui attribue un score à chaque visiteur selon ce qu'il fait. InfraFence ne modifie pas votre robots.txt : les étapes ci-dessus restent utiles à côté.

Questions

Bloquer les crawlers d'IA nuit-il à mon référencement Google ?
Pas si vous bloquez les bons noms. Selon Google, Google-Extended dans robots.txt n'a pas d'effet sur la recherche Google. Bloquer Googlebot, ou un motif qui lui correspond, en a un.
robots.txt suffit-il ?
Pour les crawlers qui le respectent, oui. Il ne fait rien contre ceux qui l'ignorent ou cachent leur nom : c'est pour cela qu'existent les règles sur le user agent et la limitation de débit.
Faut-il bloquer aussi les crawlers de recherche par IA ?
Cela dépend de votre envie d'apparaître dans les réponses des IA. Les bloquer tient votre contenu à l'écart de ces réponses et vous prive des visites qu'elles amènent. Beaucoup de sites bloquent les crawlers d'entraînement et autorisent la recherche.

Essayez gratuitement sur 1 serveur

Starter est gratuit pour un serveur, avec la protection complète et le blocage automatique. Sans carte bancaire.

Installez l'agent en root, avec votre jeton à la place de <TOKEN> :

curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>

Le jeton se crée dans le tableau de bord, dans Serveurs › Ajouter un serveur.