Bloquea los Bots de scrapping (chatGPT, googleBot, claude) con Nginx en tu sitio web

Enviado por christian el

Bloquea bots en tus sitios web usando Nginx

 

Si tienes una web (sea e-commerce, site-blog, newsletter, etc...) de cualquier tipo y tienes un mínimo de tráfico, seguramente tendrás miles y miles de peticiones que vienen de bots y que están sobrecargando tu máquina.

Aquí es importante diferenciar qué bots "compensan" y cuales no. Me explico! 

Si tengo mi sitio web y veo que tengo un montonazo de peticiones por parte del bot de Google "Googlebot", tengo una penalización de rendimiento PEEEERO es importante que no lo bloquee porque está indexando todos mis contenidos y en el fondo me compensa porque así consigo que "google me conozca"

En mi caso, y siendo un caso bastante genérico, los bots que están orientados a indexación de buscadores los veo bien y creo que compensa la penalización en relación al beneficio; ahora si, los bots orientados a scrapping y IA... bloqueados todos de momento ya que no hay beneficio aún!

 

Vamos al lio! Para hacer este bloqueo me centro en Nginx porque es donde más cómodo me siento y es lo que más trabajo. Lo he vamos a ver es como bloquear los bots en tus sitios web configurados en nginx.

PASO1: NGINX.conf

Como quiero que la config sea global, modificamos le fichero /etc/nginx/nginx.conf añadimos esto:

http {
       # Aquí habrá más config genérica
       .
       .
       
       #Tenemos dos filtros. Uno para los "bots malos que no nos hacen bien"
       map $http_user_agent $is_bad_bot {
               default 0;
               ~*(GPTBot|ChatGPT|ChatGPT-User|CCBot|Amazonbot|Bytespider|ClaudeBot|Anthropic|Google-Extended|BingPreview|AhrefsBot|SemrushBot|MJ12bot|DotBot|Scrapy) 1;
        }
        
        # Un segundo filtro en el que podemos filtrar bots que si que nos hacen bien pero lo bloqueamos igual
        map $http_user_agent $is_bot {
                default 0;
                ~*(bingbot) 1;
        }
        .
        .
        .
}

Estes filtros lo que hacen es saber si la petición que acaba de entrar es de un bot o no en base al "user-agent" de la petición

 

 

PASO2: SITE-CONF

Ya tenemos esos filtros configurados por lo que los podremos usar en todos nuestros sitios que tengamos configurados en nuestro server.

Vamos a meterlo en un sitio que sea un Drupal para hacer referencia a mi caso claro! :)

server {
	# Aquí estará toda la config de su server
	.
	.
	.
	
	# Cualquier petición que procesemos metelos el filtro de bots "malos"
    location / {
        # Si entra el filtro => 403 y bloqueamos peticion
        if ($is_bad_bot) {
                access_log off;
                return 403;
        }

        try_files $uri /index.php?$query_string;
    }
	
	# SI tenemos una demasiado dinámica podemos añdir también este filtro para quitar algunos bots extra
    location /mi-url-dinamica {
        if ($is_bot) {
            access_log off;
            return 403;
        }

        try_files $uri /index.php?$query_string;
    }
    
    .
    .
    .
}

 

Y hasta aqui! DONE :D

Dinahosting: dominios y alojamiento web
My investor

Regístrate en MyInvestory tendrás un extra de 20€ ! :D

Usa el código U048395 y te llevas un regalo en tu primera inversión :)

Usa el código 22c80f y te llevas un regalo en tu primera inversión :)