Voici plusieurs méthodes, de la plus simple à la plus complète :
1. Fichier robots.txt (à la racine du site)
User-agent: *
Disallow: /⚠️ Limitation : c’est une simple demande. Les robots malveillants l’ignorent totalement.
2. Blocage via le User-Agent en PHP
$blocked_agents = ['bot', 'spider', 'crawl', 'scrapy', 'curl', 'python'];
$ua = $_SERVER['HTTP_USER_AGENT'] ?? '';
foreach ($blocked_agents as $agent) {
if (stripos($ua, $agent) !== false) {
http_response_code(403);
exit('Accès interdit');
}
}3. Blocage via .htaccess ()
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (bot|spider|crawl|scrapy) [NC]
RewriteRule ^ - [F,L]4. Limitation du taux de requêtes (anti-flood)
session_start();
$limit = 30; // max requêtes
$periode = 60; // secondes
$now = time();
$_SESSION['hits'] = array_filter($_SESSION['hits'] ?? [],
fn($t) => $t > $now - $periode);
$_SESSION['hits'][] = $now;
if (count($_SESSION['hits']) > $limit) {
http_response_code(429);
exit('Trop de requêtes');
}⚠️ Inefficace si le robot ne gère pas les cookies/sessions. Une vraie protection par rate-limiting se fait plutôt au niveau du serveur (Nginx limit_req, fail2ban, ou Cloudflare).
5. Piège à robots (honeypot)
Ajoutez un lien invisible dans vos pages ; les humains ne le voient pas, les robots le suivent :
<a href="/piege-robots.php" style="display:none;">ne pas cliquer</a>
// piege-robots.php
$ip = $_SERVER['REMOTE_ADDR'];
file_put_contents('/var/log/robots-bannis.txt', $ip . "\n", FILE_APPEND);
http_response_code(403);
exit;Puis bannissez ces IPs via fail2ban ou un contrôle en haut de chaque page :
$bannis = file('/var/log/robots-bannis.txt', FILE_IGNORE_NEW_LINES);
if (in_array($_SERVER['REMOTE_ADDR'], $bannis)) {
http_response_code(403);
exit;
}Recommandation
Pour une protection efficace, combinez les méthodes : robots.txt pour les robots légitimes + rate-limiting au niveau du serveur + honeypot + éventuellement un service comme Cloudflare pour bloquer les bots malveillants en amont.