Los hostings bloquean a los bots de IA y no lo sabes

La última jugada en SEO no viene de Google ni de OpenAI, sino de los propios hostings. Sin previo aviso, varios proveedores han decidido cerrar la puerta a los crawlers de IA. No es tu robots.txt, no es una decisión editorial: es tu servidor el que responde con un 403 Forbidden antes de que ChatGPT o Claude puedan siquiera asomarse. Y mientras tanto, tú sigues invirtiendo tiempo y presupuesto en optimizar cada detalle de tu estrategia para ganar visibilidad en esas mismas IA.

El contraste lo muestran bien las capturas. En el caso del New York Times, lo que ocurre es un portazo en la cara: el servidor devuelve un 403 directo a los bots de OpenAI, Anthropic y Perplexity. No importa lo que diga el archivo robots.txt, la decisión se toma antes de leerlo. Eso es un bloqueo duro, un muro digital que no admite negociación.

bots de ia bloqueados
Bots de IA bloqueados por el New York Times

El otro escenario es menos violento, pero igual de definitivo: el bloqueo blando. Aquí el servidor responde con un 200 OK, pero es el robots.txt el que impone la prohibición de paso a los crawlers de IA. Es como poner un cartel de no pasarás: no es que no puedan entrar, es que se espera que respeten la instrucción. Técnicamente es más transparente, aunque el resultado sea idéntico: invisibilidad en los modelos de lenguaje.

bots de ia bloqueados 2

El problema es que esa diferencia se pierde fácilmente en la práctica. Ahí entra el sesgo de falsa seguridad: creemos que si en nuestro robots.txt no aparece ninguna prohibición, estamos dentro del radar de las IAs. Pero no. Tu hosting puede estar bloqueando por defecto y todo tu esfuerzo por ser visible en los LLMs queda en la nada. Es como gastar años en SEO para Google y descubrir que alguien apagó tu servidor en Search Console sin que lo supieras.

Las consecuencias son silenciosas pero enormes. Estás convencido de que optimizar titles, estructurar tu contenido y fortalecer tu SEO de popularidad te abrirá espacio en los resultados generativos… pero si los bots nunca ven tus páginas, no entrenan con ellas, no te citan y no te muestran. Inviertes en alimentar la IA, pero no pasas ni de la primera puerta. Y lo más cruel es que tu competencia sí puede estar dentro, apropiándose de esa visibilidad que tú creías estar construyendo.

La única salida es revisar, no asumir. Testear regularmente qué reciben los bots de IA cuando llegan a tu sitio, analizar logs de servidor y decidir si quieres bloquear o abrir. Porque aquí ya no se trata solo de SEO técnico. Aquí la pregunta es si estás dispuesto a desaparecer del mapa de las IAs por una configuración de hosting que nunca pediste.

Y si quieres dejar de adivinar, prueba con herramientas como AI Bot Analyzer, que simulan la visita de los crawlers de IA y te muestran en segundos si estás abierto… o si tu hosting ya decidió bloquearte.

// Asegúrate de que jQuery esté cargado jQuery(function($) { // Selector único de TU widget de Posts para evitar conflictos var WIDGET_SELECTOR = '.elementor-element-5e7a80bf'; var GRID_CONTAINER_SELECTOR = WIDGET_SELECTOR + ' .elementor-posts-container'; var ITEM_SELECTOR = '.elementor-post.elementor-grid-item'; // Función para reajustar Masonry después de la carga function refreshMasonry($grid, $newItems) { // Asegura que las imágenes de los nuevos ítems estén cargadas // ANTES de que Masonry recalcule sus alturas. (Recomendado: Usar imagesLoaded) $newItems.imagesLoaded(function() { // 1. Notificar a Masonry de los nuevos elementos $grid.masonry('appended', $newItems); // 2. Re-distribuir todos los elementos para rellenar huecos $grid.masonry('layout'); }); } // Gancho de Elementor: Se dispara cuando un widget de Posts se inicializa o se manipula. elementorFrontend.hooks.addAction( 'frontend/element_ready/posts.cards', // Hook específico para tu widget de tarjetas de Posts function($scope) { // Solo actuar sobre TU widget específico if (!$scope.is(WIDGET_SELECTOR)) { return; } // 1. Obtener la instancia de Masonry de este widget // Elementor ya inicializó Masonry, solo necesitamos obtener la referencia var $grid = $scope.find(GRID_CONTAINER_SELECTOR); // Obtener la instancia de Masonry (si existe) var masonryInstance = $grid.data('masonry'); if (!masonryInstance) { // Si Masonry no se inicializó correctamente (ej. por imágenes sin cargar al inicio), // puedes intentar forzar la inicialización aquí, pero lo normal es que Elementor lo haga. // $grid.masonry({...}) return; } // 2. Escuchar el evento de 'Carga Terminada' // Elementor Pro añade la clase 'elementor-loading' al contenedor mientras carga el AJAX. // La clase 'e-load-more-pagination-end' ya está en el HTML, pero no la usaremos para el evento. // Observador para detectar cambios en los atributos del DOM (cuando Elementor añade nuevos posts) var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { // Elementor añade los nuevos posts como hijos del contenedor var $newItems = $(mutation.addedNodes).filter(ITEM_SELECTOR); if ($newItems.length) { // Encontró nuevos posts, ¡es hora de reajustar Masonry! refreshMasonry($grid, $newItems); } } }); }); // Configurar el observador para monitorear la adición de nodos hijos observer.observe($grid[0], { childList: true }); } ); });