Ir al contenido principal

Bots IA, robots.txt, llms.txt, .htaccess y gestión de recursos

Gestionar las peticiones http correctamente, ayuda a mantener el consumo de recursos dentro de parámetros razonables, asegurando la estabilidad de nuestro sitio


La importancia del archivo robots.txt

El objetivo principal de robots.txt es definir de forma explícita qué partes de un sitio web pueden o no ser utilizadas por modelos de lenguaje para entrenamiento, indexación o generación de respuestas.

Su importancia radica en varios puntos clave:

  • Control del uso de contenido: permite al propietario del sitio decidir si su contenido puede ser usado por robots y en qué condiciones.

  • Protección de recursos: los crawlers de bots IA suelen realizar exploraciones profundas y repetitivas, generando muchas más peticiones que un bot SEO convencional.

  • Cumplimiento y gobernanza: ayuda a dejar constancia técnica de la política de uso del contenido, algo cada vez más relevante en términos legales y de licencias.

  • Transparencia: establece reglas claras y legibles por máquinas sobre cómo debe interactuar el robot con el sitio.

En un contexto donde el número de bots IA crece constantemente, no disponer de un archivo robots.txt implica perder control tanto sobre el contenido como sobre el consumo de recursos del servidor.

Un archivo robots.txt estándar para un WordPress genérico sería:

# robots.txt
User-agent: *

# Block sensitive WordPress paths
Disallow: /wp-admin/
Disallow: /wp-login.php
Disallow: /wp-cron.php
Disallow: /wp-json/
Disallow: /wp-uploads/

# Allow public frontend
Allow: /

Version de robots.txt optimizado para bloqueo de bots en WordPress:

# ==========================================
# 1. REGLAS PARA MOTORES DE BÚSQUEDA GENERALES
# ==========================================
User-agent: *
Crawl-delay: 2

# Directorios internos y sensibles
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/themes/
Disallow: /wp-json/
Disallow: /trackback/
Disallow: /xmlrpc.php

# Archivos sensibles
Disallow: /.env
Disallow: /.git/
Disallow: /wp-config.php
Disallow: /wp-cron.php
Disallow: /error_log
Disallow: /debug.log

# Feeds (evita contenido duplicado)
Disallow: /feed/
Disallow: /comments/feed/
Disallow: /*/feed/
Disallow: /*/feed/$
Disallow: /*/comments/feed/

# Búsquedas internas
Disallow: /?s=
Disallow: /*?s=
Disallow: /search/

# ==========================================
# WOOCOMMERCE — PARÁMETROS DE FILTROS Y FACETS
# ==========================================
# Fuente: github.com/woocommerce/woocommerce — class-wc-query.php,
# class-wc-widget-layered-nav.php, class-wc-widget-price-filter.php,
# class-wc-widget-rating-filter.php (verificado en código fuente)
#
# PARÁMETROS DEL CORE DE WOOCOMMERCE
# filter_[atributo] → filtro de atributo layered nav (p.ej. filter_color, filter_size)
# query_type_[atributo] → tipo de consulta AND/OR del filtro de atributo
# min_price / max_price → rango de precios (widget Price Filter)
# rating_filter → filtro por valoración (widget Rating Filter)
# orderby → ordenación del catálogo
# paged / page → paginación interna WooCommerce
# add-to-cart → acción añadir al carrito (genera URLs duplicadas)
# add_to_wishlist → acción añadir a lista de deseos
#
# NOTA: No bloquees /shop/, /product-category/ ni /product/ —
# son las páginas de valor SEO que sí quieres indexadas.

# Filtros de atributos (layered nav — WooCommerce core)
Disallow: /*?filter_
Disallow: /*&filter_

# Tipo de consulta del filtro (AND/OR)
Disallow: /*?query_type_
Disallow: /*&query_type_

# Filtro de precio
Disallow: /*?min_price=
Disallow: /*&min_price=
Disallow: /*?max_price=
Disallow: /*&max_price=

# Filtro de valoración
Disallow: /*?rating_filter=
Disallow: /*&rating_filter=

# Ordenación del catálogo
Disallow: /*?orderby=
Disallow: /*&orderby=

# Paginación (genera duplicados)
Disallow: /*?paged=
Disallow: /*&paged=
Disallow: /*?page=
Disallow: /*&page=

# Acciones de carrito y wishlist (URLs no indexables)
Disallow: /*?add-to-cart=
Disallow: /*?add_to_wishlist=

# WooCommerce — páginas privadas del cliente
Disallow: /cart/
Disallow: /checkout/
Disallow: /my-account/
Disallow: /wp-login.php

# Recursos esenciales para rastreo y diseño
Allow: /wp-admin/admin-ajax.php
Allow: /wp-includes/*.js
Allow: /wp-includes/*.css
Allow: /wp-content/uploads/
Allow: /wp-content/plugins/*.js
Allow: /wp-content/plugins/*.css
Allow: /wp-content/themes/*.js
Allow: /wp-content/themes/*.css

# ==========================================
# 2. BOTS DE IA — BLOQUEO SELECTIVO
# ==========================================
# Solo se listan aquí bots VERIFICADOS que respetan robots.txt.
# Los que lo ignoran van únicamente en .htaccess.
#
# ESTRATEGIA:
# - Bloqueamos bots de ENTRENAMIENTO (usan tu contenido para entrenar modelos)
# - Permitimos bots de BÚSQUEDA/CITACIÓN (los que hacen que te nombren en respuestas IA)
#
# Para permitir que un bot te cite, simplemente no lo listes aquí.
# El bloque User-agent: * de la sección 1 ya les aplica las restricciones de directorios.

# --- ANTHROPIC ---
# Fuente: support.anthropic.com, actualizado 20 feb 2026
# ClaudeBot → entrenamiento de modelos → BLOQUEADO
# Claude-User → fetch a petición del usuario → PERMITIDO (no listado)
# Claude-SearchBot → indexación para resultados Claude → PERMITIDO (no listado)
# Nota: Claude-Web y anthropic-ai son UAs deprecados pero aún pueden aparecer en logs
User-agent: ClaudeBot
Disallow: /

User-agent: Claude-Web
Disallow: /

User-agent: anthropic-ai
Disallow: /

# --- OPENAI ---
# Fuente: platform.openai.com/docs/bots
# GPTBot → entrenamiento de modelos → BLOQUEADO
# OAI-SearchBot → indexación para ChatGPT Search → PERMITIDO (no listado)
# ChatGPT-User → fetch a petición del usuario → PERMITIDO (no listado)
User-agent: GPTBot
Disallow: /

# --- GOOGLE ---
# Fuente: developers.google.com/search/docs/crawling-indexing/google-common-crawlers
# Google-Extended → entrenamiento Gemini/Vertex → BLOQUEADO
# GoogleOther → uso interno de Google → BLOQUEADO (sin valor para ti)
# Google-CloudVertexBot → entrenamiento Vertex AI → BLOQUEADO
# Googlebot → indexación búsqueda clásica → PERMITIDO (no listado)
User-agent: Google-Extended
Disallow: /

User-agent: GoogleOther
Disallow: /

User-agent: Google-CloudVertexBot
Disallow: /

# --- APPLE ---
# Applebot-Extended → entrenamiento Apple Intelligence → BLOQUEADO
# Applebot → indexación Spotlight/Siri → PERMITIDO (no listado)
User-agent: Applebot-Extended
Disallow: /

# --- META ---
# Fuente: developers.facebook.com/docs/sharing/webmasters/web-crawlers (verificado)
# meta-webindexer → búsqueda Meta AI, cita contenido → BLOQUEADO (decides tú)
# meta-externalagent → entrenamiento modelos Meta → BLOQUEADO
# meta-externalads → publicidad y productos negocio → BLOQUEADO
# meta-externalfetcher → fetch usuario, IGNORA robots.txt → va en .htaccess
# facebookexternalhit → previews links, PUEDE ignorar robots.txt → va en .htaccess
# FacebookBot → entrenamiento Meta AI, respeta robots.txt → BLOQUEADO
User-agent: meta-webindexer
Disallow: /

User-agent: meta-externalagent
Disallow: /

User-agent: meta-externalads
Disallow: /

User-agent: FacebookBot
Disallow: /

# --- PERPLEXITY ---
# Fuente: docs.perplexity.ai/docs/resources/perplexity-crawlers
# PerplexityBot → indexación search Perplexity → BLOQUEADO (decides tú)
# Perplexity-User → fetch usuario, IGNORA robots.txt → va en .htaccess
User-agent: PerplexityBot
Disallow: /

# --- COHERE ---
User-agent: cohere-ai
Disallow: /

User-agent: cohere-training-data-crawler
Disallow: /

# --- AMAZON ---
User-agent: Amazonbot
Disallow: /

# --- DUCKDUCKGO ---
User-agent: DuckAssistBot
Disallow: /

# --- YOU.COM ---
User-agent: YouBot
Disallow: /

# --- MISTRAL ---
User-agent: MistralBot
Disallow: /

# --- xAI (GROK) ---
User-agent: xAI-Bot
Disallow: /

# --- DEEPSEEK ---
User-agent: DeepSeekBot
Disallow: /

# --- HUGGING FACE ---
User-agent: HuggingFaceBot
Disallow: /

# --- ALLEN INSTITUTE FOR AI ---
User-agent: Ai2Bot
Disallow: /

# --- HUAWEI PETAL SEARCH ---
# Fuente: aspiegel.com/petalbot — respeta robots.txt (verificado)
User-agent: PetalBot
Disallow: /

# --- COMMON CRAWL ---
# Fuente: commoncrawl.org/faq — respeta robots.txt (verificado)
User-agent: CCBot
Disallow: /

# --- BYTESPIDER (BYTEDANCE) ---
# NOTA: Va también en .htaccess. Tiene bug documentado con bloques agrupados
# pero respeta bloque individual. Segunda capa en .htaccess por comportamiento agresivo.
User-agent: Bytespider
Disallow: /

# --- OTROS SCRAPERS CON POLÍTICA CONOCIDA ---
User-agent: DataForSeoBot
Disallow: /

User-agent: SemrushBot
Disallow: /

User-agent: SemrushBot-BA
Disallow: /

User-agent: SemrushBot-SI
Disallow: /

User-agent: SemrushBot-SWA
Disallow: /

User-agent: TurnitinBot
Disallow: /

User-agent: Omgili
Disallow: /

User-agent: omgilibot
Disallow: /

User-agent: magpie-crawler
Disallow: /

User-agent: img2dataset
Disallow: /

User-agent: FriendlyCrawler
Disallow: /

User-agent: Timpibot
Disallow: /

User-agent: PiplBot
Disallow: /

User-agent: YandexAdditional
Disallow: /

User-agent: Sidetrade
Disallow: /

User-agent: peer39_crawler
Disallow: /

User-agent: VelenPublicWebCrawler
Disallow: /

User-agent: ICC-Crawler
Disallow: /

User-agent: Awario
Disallow: /

User-agent: Cotoyogi
Disallow: /

User-agent: EchoboxBot
Disallow: /

User-agent: ExaBot
Disallow: /

User-agent: Factset_spyderbot
Disallow: /

User-agent: ImagesiftBot
Disallow: /

User-agent: LAIONDownloader
Disallow: /


Version de robots.txt optimizado para bloqueo de bots en Prestashop:

# ==========================================
# 1. REGLAS PARA MOTORES DE BÚSQUEDA GENERALES
# ==========================================
User-agent: *
Crawl-delay: 2

# Directorios del Core y Sistema
Disallow: /app/
Disallow: /bin/
Disallow: /classes/
Disallow: /config/
Disallow: /controllers/
Disallow: /download/
Disallow: /mails/
Disallow: /modules/
Disallow: /override/
Disallow: /pdf/
Disallow: /src/
Disallow: /tools/
Disallow: /translations/
Disallow: /upload/
Disallow: /var/
Disallow: /vendor/
Disallow: /webservice/

# Archivos de configuración y desarrollo
Disallow: /composer.json
Disallow: /composer.lock
Disallow: /Gruntfile.js
Disallow: /package.json
Disallow: /package-lock.json
Disallow: /images.inc.php
Disallow: /init.php
Disallow: /.env
Disallow: /.git/
Disallow: /error_log
Disallow: /debug.log

# Páginas de usuario, carrito y checkout
Disallow: /address
Disallow: /addresses
Disallow: /authentication
Disallow: /cart
Disallow: /discount
Disallow: /guest-tracking
Disallow: /history
Disallow: /identity
Disallow: /my-account
Disallow: /order
Disallow: /order-slip
Disallow: /order-follow
Disallow: /order-confirmation
Disallow: /password-recovery
Disallow: /search
Disallow: /buscar
Disallow: /recherche

# ==========================================
# PS_FACETEDSEARCH — PARÁMETROS DE FILTROS Y FACETS
# ==========================================
# Fuente: github.com/PrestaShop/ps_facetedsearch (código fuente verificado)
# github.com/PrestaShop/PrestaShop — robots.txt generator (issue #14836)
#
# PrestaShop con URLs amigables activadas genera rutas tipo:
# /categoria/5-ropa-mujer.html#/atributo-valor
# Con el módulo ps_facetedsearch sin URLs amigables genera parámetros GET:
# ?id_category_layered=X&layered_attribute_X=Y&layered_price_min=Z
#
# PARÁMETROS CORE DE PRESTASHOP (generados por el propio CMS)
# Fuente: robots.txt generator oficial de PrestaShop (clase RobotsTextCore)

# Parámetros de ordenación y filtros básicos
Disallow: /*?order=
Disallow: /*&order=
Disallow: /*?orderby=
Disallow: /*&orderby=
Disallow: /*?orderway=
Disallow: /*&orderway=

# Búsqueda y etiquetas
Disallow: /*?tag=
Disallow: /*&tag=
Disallow: /*?search_query=
Disallow: /*&search_query=

# Navegación y sesión
Disallow: /*?back=
Disallow: /*&back=
Disallow: /*?n=
Disallow: /*&n=

# Moneda e idioma
Disallow: /*?id_currency=
Disallow: /*&id_currency=
Disallow: /*?id_lang=
Disallow: /*&id_lang=

# PARÁMETROS DEL MÓDULO PS_FACETEDSEARCH
# Fuente: ps_facetedsearch/src/Hook/FilterNavigationHook.php y FacetedSearchFacets.php
# El módulo genera URLs con estos patrones cuando las URLs amigables están desactivadas
# o como parámetros adicionales en modo mixto

# Filtros por categoría del módulo layered nav
Disallow: /*?id_category_layered=
Disallow: /*&id_category_layered=

# Filtros por atributos (color, talla, material, etc.)
Disallow: /*?layered_attribute_
Disallow: /*&layered_attribute_

# Filtros por características del producto (feature)
Disallow: /*?layered_feature_
Disallow: /*&layered_feature_

# Filtros por precio
Disallow: /*?layered_price_min=
Disallow: /*&layered_price_min=
Disallow: /*?layered_price_max=
Disallow: /*&layered_price_max=

# Filtros por peso
Disallow: /*?layered_weight_min=
Disallow: /*&layered_weight_min=
Disallow: /*?layered_weight_max=
Disallow: /*&layered_weight_max=

# Filtros de condición, fabricante y disponibilidad
Disallow: /*?layered_condition_
Disallow: /*&layered_condition_
Disallow: /*?layered_manufacturer_
Disallow: /*&layered_manufacturer_
Disallow: /*?layered_quantity_
Disallow: /*&layered_quantity_

# Parámetros de paginación del módulo
Disallow: /*?p=
Disallow: /*&p=

# Parámetros heredados del módulo blocklayered (PrestaShop < 1.7)
Disallow: /*?id_feature_
Disallow: /*&id_feature_

# Parámetros adicionales que generan contenido duplicado
Disallow: /*?id_category_search=
Disallow: /*&id_category_search=
Disallow: /*?benefit_categories[]=
Disallow: /*?developed_by[]=
Disallow: /*?compatibility=
Disallow: /*?rating=
Disallow: /*?rate_above=
Disallow: /*?sorting=
Disallow: /*?page=
Disallow: /*&page=
Disallow: /*?multishop[]=
Disallow: /*?multistore=
Disallow: /*?offers[]=
Disallow: /*?style=
Disallow: /*?translations=

# Seguridad y CDN
Disallow: /cdn-cgi/

# Recursos esenciales para rastreo y diseño
Allow: /modules/*.css
Allow: /modules/*.js
Allow: /modules/*.jpg
Allow: /modules/*.png

# ==========================================
# 2. BOTS DE IA — BLOQUEO SELECTIVO
# ==========================================
# Solo se listan aquí bots VERIFICADOS que respetan robots.txt.
# Los que lo ignoran van únicamente en .htaccess.
#
# ESTRATEGIA:
# - Bloqueamos bots de ENTRENAMIENTO (usan tu contenido para entrenar modelos)
# - Permitimos bots de BÚSQUEDA/CITACIÓN (los que hacen que te nombren en respuestas IA)
#
# Para permitir que un bot te cite, simplemente no lo listes aquí.
# El bloque User-agent: * de la sección 1 ya les aplica las restricciones de directorios.

# --- ANTHROPIC ---
# Fuente: support.anthropic.com, actualizado 20 feb 2026
# ClaudeBot → entrenamiento de modelos → BLOQUEADO
# Claude-User → fetch a petición del usuario → PERMITIDO (no listado)
# Claude-SearchBot → indexación para resultados Claude → PERMITIDO (no listado)
# Nota: Claude-Web y anthropic-ai son UAs deprecados pero aún pueden aparecer en logs
User-agent: ClaudeBot
Disallow: /

User-agent: Claude-Web
Disallow: /

User-agent: anthropic-ai
Disallow: /

# --- OPENAI ---
# Fuente: platform.openai.com/docs/bots
# GPTBot → entrenamiento de modelos → BLOQUEADO
# OAI-SearchBot → indexación para ChatGPT Search → PERMITIDO (no listado)
# ChatGPT-User → fetch a petición del usuario → PERMITIDO (no listado)
User-agent: GPTBot
Disallow: /

# --- GOOGLE ---
# Fuente: developers.google.com/search/docs/crawling-indexing/google-common-crawlers
# Google-Extended → entrenamiento Gemini/Vertex → BLOQUEADO
# GoogleOther → uso interno de Google → BLOQUEADO (sin valor para ti)
# Google-CloudVertexBot → entrenamiento Vertex AI → BLOQUEADO
# Googlebot → indexación búsqueda clásica → PERMITIDO (no listado)
User-agent: Google-Extended
Disallow: /

User-agent: GoogleOther
Disallow: /

User-agent: Google-CloudVertexBot
Disallow: /

# --- APPLE ---
# Applebot-Extended → entrenamiento Apple Intelligence → BLOQUEADO
# Applebot → indexación Spotlight/Siri → PERMITIDO (no listado)
User-agent: Applebot-Extended
Disallow: /

# --- META ---
# Fuente: developers.facebook.com/docs/sharing/webmasters/web-crawlers (verificado)
# meta-webindexer → búsqueda Meta AI, cita contenido → BLOQUEADO (decides tú)
# meta-externalagent → entrenamiento modelos Meta → BLOQUEADO
# meta-externalads → publicidad y productos negocio → BLOQUEADO
# meta-externalfetcher → fetch usuario, IGNORA robots.txt → va en .htaccess
# facebookexternalhit → previews links, PUEDE ignorar robots.txt → va en .htaccess
# FacebookBot → entrenamiento Meta AI, respeta robots.txt → BLOQUEADO
User-agent: meta-webindexer
Disallow: /

User-agent: meta-externalagent
Disallow: /

User-agent: meta-externalads
Disallow: /

User-agent: FacebookBot
Disallow: /

# --- PERPLEXITY ---
# Fuente: docs.perplexity.ai/docs/resources/perplexity-crawlers
# PerplexityBot → indexación search Perplexity → BLOQUEADO (decides tú)
# Perplexity-User → fetch usuario, IGNORA robots.txt → va en .htaccess
User-agent: PerplexityBot
Disallow: /

# --- COHERE ---
User-agent: cohere-ai
Disallow: /

User-agent: cohere-training-data-crawler
Disallow: /

# --- AMAZON ---
User-agent: Amazonbot
Disallow: /

# --- DUCKDUCKGO ---
User-agent: DuckAssistBot
Disallow: /

# --- YOU.COM ---
User-agent: YouBot
Disallow: /

# --- MISTRAL ---
User-agent: MistralBot
Disallow: /

# --- xAI (GROK) ---
User-agent: xAI-Bot
Disallow: /

# --- DEEPSEEK ---
User-agent: DeepSeekBot
Disallow: /

# --- HUGGING FACE ---
User-agent: HuggingFaceBot
Disallow: /

# --- ALLEN INSTITUTE FOR AI ---
User-agent: Ai2Bot
Disallow: /

# --- HUAWEI PETAL SEARCH ---
# Fuente: aspiegel.com/petalbot — respeta robots.txt (verificado)
User-agent: PetalBot
Disallow: /

# --- COMMON CRAWL ---
# Fuente: commoncrawl.org/faq — respeta robots.txt (verificado)
User-agent: CCBot
Disallow: /

# --- BYTESPIDER (BYTEDANCE) ---
# NOTA: Va también en .htaccess. Tiene bug documentado con bloques agrupados
# pero respeta bloque individual. Segunda capa en .htaccess por comportamiento agresivo.
User-agent: Bytespider
Disallow: /

# --- OTROS SCRAPERS CON POLÍTICA CONOCIDA ---
User-agent: DataForSeoBot
Disallow: /

User-agent: SemrushBot
Disallow: /

User-agent: SemrushBot-BA
Disallow: /

User-agent: SemrushBot-SI
Disallow: /

User-agent: SemrushBot-SWA
Disallow: /

User-agent: TurnitinBot
Disallow: /

User-agent: Omgili
Disallow: /

User-agent: omgilibot
Disallow: /

User-agent: magpie-crawler
Disallow: /

User-agent: img2dataset
Disallow: /

User-agent: FriendlyCrawler
Disallow: /

User-agent: Timpibot
Disallow: /

User-agent: PiplBot
Disallow: /

User-agent: YandexAdditional
Disallow: /

User-agent: Sidetrade
Disallow: /

User-agent: peer39_crawler
Disallow: /

User-agent: VelenPublicWebCrawler
Disallow: /

User-agent: ICC-Crawler
Disallow: /

User-agent: Awario
Disallow: /

User-agent: Cotoyogi
Disallow: /

User-agent: EchoboxBot
Disallow: /

User-agent: ExaBot
Disallow: /

User-agent: Factset_spyderbot
Disallow: /

User-agent: ImagesiftBot
Disallow: /

User-agent: LAIONDownloader
Disallow: /



Bots que no hacen caso a robots.txt y bloqueo por .htaccess

Cuando un bot no hace caso de las instrucciones en robots.txt (tambien conocidos como batbots o bots "malos"). Seguiremos recibiendo peticiones sin control, para gestionarlos hay que bloquearlos desde el archivo .htaccess haciendo uso de instrucciones mod_rewrite o env.

Version de archivo .htaccess optimizado para bloqueo robots malos conocidos y mejorar la seguridad ante peticiones de robots desconocidos:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# =========================================================================
# 1. QUERY STRINGS EXAGERADAMENTE LARGAS
# Bloquea ataques o escaneos con cadenas de consulta de más de 600 caracteres
# =========================================================================
RewriteCond %{QUERY_STRING} .{600,} [NC,OR]

# =========================================================================
# 2. PAGINACIONES ABSURDAS
# Bloquea peticiones a partir de la página 10.000 (escaneos destructivos)
# =========================================================================
RewriteCond %{QUERY_STRING} (^|&)(page|paged)=[1-9][0-9]{4,} [NC,OR]

# =========================================================================
# 3. USER-AGENTS DE NAVEGADORES OBSOLETOS
# Ningún usuario real usa Firefox < 40, Chrome < 50 o IE hoy en día.
# NOTA: UA vacío desactivado — puede romper pasarelas de pago
# (Stripe, Redsys, PayPal usan peticiones sin UA en algunos flujos).
# =========================================================================
RewriteCond %{HTTP_USER_AGENT} Firefox\/([1-3][0-9]|[1-9])\. [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Chrome\/([1-4][0-9]|[1-9])\. [NC,OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\ ([1-9]|10)\. [NC,OR]
RewriteCond %{HTTP_USER_AGENT} Opera\/[1-9]\. [NC,OR]

# =========================================================================
# 4. BOTS QUE IGNORAN ROBOTS.TXT — ÚNICA CAPA EFECTIVA CONTRA ELLOS
#
# CRITERIO: Solo entran bots con comportamiento de ignorar robots.txt
# DOCUMENTADO en fuentes oficiales o independientes verificadas.
#
# -------------------------------------------------------------------------
# BYTESPIDER (ByteDance/TikTok)
# Fuente: múltiples informes independientes + issue #108 ai-robots-txt/ai.robots.txt
# Ignora robots.txt. Bug adicional con bloques agrupados (por eso va también en robots.txt
# con bloque individual como segunda capa).
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} (Bytespider|ByteDance|TikTokSpider) [NC,OR]

# -------------------------------------------------------------------------
# DIFFBOT
# Fuente: docs.diffbot.com/docs/does-crawl-respect-robotstxt
# Documentación oficial: ignora robots.txt "by default". Solo lo respeta
# si el cliente que usa el servicio lo configura expresamente.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} Diffbot [NC,OR]

# -------------------------------------------------------------------------
# FACEBOOKEXTERNALHIT (≠ FacebookBot)
# Fuente: developers.facebook.com/docs/sharing/webmasters/web-crawlers (verificado)
# La documentación oficial de Meta dice explícitamente que puede saltarse
# robots.txt en comprobaciones de seguridad e integridad.
# ATENCIÓN: bloquearlo elimina las previews de links en Facebook/Instagram.
# Solo bloquea si no usas redes de Meta para marketing.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} facebookexternalhit [NC,OR]

# -------------------------------------------------------------------------
# META-EXTERNALFETCHER
# Fuente: developers.facebook.com/docs/sharing/webmasters/web-crawlers (verificado)
# La documentación oficial de Meta dice explícitamente: "this crawler may
# bypass robots.txt rules". No tiene sentido listarlo en robots.txt.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} meta-externalfetcher [NC,OR]

# -------------------------------------------------------------------------
# PERPLEXITY-USER
# Fuente: docs.perplexity.ai + Cloudflare report agosto 2025
# Documentación oficial: "generally ignores robots.txt rules" porque lo
# considera un agente, no un bot. Además, Cloudflare documentó en agosto 2025
# que Perplexity usa crawlers no declarados que rotan UAs e IPs para evadir bloqueos.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} Perplexity-User [NC,OR]

# -------------------------------------------------------------------------
# CLAUDE-USER
# Fuente: searchenginejournal.com (feb 2026), ppc.land (feb 2026)
# Anthropic actualizó su documentación en febrero 2026. Claude-User respeta
# robots.txt según Anthropic, pero OpenAI y Perplexity advierten que sus
# equivalentes pueden no hacerlo. Se incluye aquí como medida conservadora
# dado que es un fetcher a petición de usuario, no un crawler tradicional.
# ELIMINA esta línea si quieres que Claude pueda acceder a tu web en tiempo real.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} Claude-User [NC,OR]

# -------------------------------------------------------------------------
# CHATGPT-USER
# Fuente: platform.openai.com/docs/bots
# OpenAI advierte explícitamente que ChatGPT-User "may not respect robots.txt"
# porque es un fetcher iniciado por el usuario, no un crawler automático.
# ELIMINA esta línea si quieres que ChatGPT pueda acceder a tu web en tiempo real.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} ChatGPT-User [NC,OR]

# -------------------------------------------------------------------------
# SCRAPERS Y HERRAMIENTAS SIN DOCUMENTACIÓN NI POLÍTICA CONOCIDA
# Sin UA propio verificable, sin política pública de robots.txt.
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} (Crawl4AI|FirecrawlAgent|Firecrawl|Stagehand|WebVoyager|WebSurfer|Lightpanda|SpiderCreator|RobotSpider|PulsarRPA) [NC,OR]

# -------------------------------------------------------------------------
# BOTS DE SEO ABUSIVO Y SPINNING SIN POLÍTICA CONOCIDA
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} (AddSearchBot|Copyscape|SEObot|Spinbot|ContentAtScale|AnyPicker) [NC,OR]

# -------------------------------------------------------------------------
# BOTS SIN DOCUMENTACIÓN PÚBLICA NI POLÍTICA CONOCIDA
# -------------------------------------------------------------------------
RewriteCond %{HTTP_USER_AGENT} (ISSCyberRiskCrawler|KunatoCrawler|Panscient|Proximic|WARDBot|Webzio) [NC]

# ACCIÓN: Denegar acceso con 403 Forbidden
RewriteRule .* - [F,L]

</IfModule>

# =========================================================================
# 5. PROTECCIÓN DE ARCHIVOS SENSIBLES
# Bloquea acceso HTTP directo a archivos que nunca deben ser públicos
# =========================================================================
<FilesMatch "(\.env|\.git|composer\.(json|lock)|package(-lock)?\.json|phpinfo\.php|error_log|debug\.log|\.htpasswd|\.htaccess)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
Deny from all
</IfModule>
</FilesMatch>

# =========================================================================
# 6. CABECERAS DE SEGURIDAD HTTP
# =========================================================================
<IfModule mod_headers.c>
# Evita clickjacking
Header always set X-Frame-Options "SAMEORIGIN"
# Evita MIME sniffing
Header always set X-Content-Type-Options "nosniff"
# Limita información del referrer
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# Elimina cabecera que revela la tecnología del servidor
Header unset X-Powered-By
Header always unset X-Powered-By

# HSTS: fuerza HTTPS durante 1 año
# Descomenta SOLO si tienes SSL estable y sin previsión de quitarlo
# Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

# =========================================================================
# 7. PREVENCIÓN DE HOTLINKING DE IMÁGENES (plantilla lista para activar)
# Sustituye tudominio\.com por tu dominio real antes de descomentar
# =========================================================================
# <IfModule mod_rewrite.c>
# RewriteEngine On
# RewriteCond %{HTTP_REFERER} !^$
# RewriteCond %{HTTP_REFERER} !^https?://(www\.)?tudominio\.com [NC]
# RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,NC,L]
# </IfModule>



Lectura y gestion de contenido para chatbots IA (LLMs) desde llms.txt

El archivo llms.txt surge como una propuesta (no un estándar oficial) que consiste en un archivo en la raíz del sitio con un resumen estructurado de tu contenido en Markdown, pensado para que los LLMs lo lean en lugar de rastrear todo el sitio.
Es más un directorio de contenido curado que un mecanismo de control de permisos

Son pocos los agentes IA que le empiezan a leer y tomar en cuenta.
Esta pensado pensando en el futuro GEO de la página.

La lógica es: si un agente o LLM visita tu sitio buscando información sobre tu negocio, un llms.txt bien redactado le da contexto inmediato y limpio en lugar de tener que parsear HTML con menús, banners y JavaScript.

Pero incluso ahí, como vimos antes, los datos de 2026 dicen que los bots que importan (GPTBot, ClaudeBot, PerplexityBot) prácticamente no lo leen todavía: https://limy.ai/blog/llms.txt-in-2026-the-full-guide


El caso donde sí tiene valor real hoy es más específico de lo que parece: si tienes un sitio de documentación técnica, una API, o un producto que usan desarrolladores con herramientas como Cursor o Claude Code. Esos agentes de IDE sí lo leen activamente porque necesitan entender la estructura del proyecto o la API para generar código correcto.

Un ejemplo básico de un archivo llms.txt genérico sería:

# Nombre del Sitio

> Una frase que describe qué es el sitio y a quién va dirigido.

Párrafo opcional con más contexto si hace falta.

## Sección principal

- [Título de la página](https://tudominio.com/pagina/): Descripción breve de qué contiene.
- [Otra página](https://tudominio.com/otra/): Para qué sirve esta página.

## Otra sección

- [Página](https://tudominio.com/mas/): Descripción.



El problema de wp-cron y los bots IA

Por defecto, WordPress utiliza wp-cron.php, un sistema de pseudo-cron que se ejecuta en cada visita al sitio. Esto significa que cada request HTTP puede disparar comprobaciones y tareas programadas, incluso aunque no haya nada que ejecutar.

Aquí surge el problema:

Cuando crawlers de LLM acceden al sitio (a menudo con alta frecuencia, ejecutando JavaScript y sin cache) cada visita puede activar wp-cron, provocando:

  • Uso excesivo de CPU

  • Aumento de procesos PHP simultáneos

  • Saturación de memoria

  • Retrasos en la respuesta del sitio

  • Errores 503 intermitentes

Con crawlers tradicionales esto ya era un riesgo, pero con LLM crawlers el impacto se multiplica, ya que suelen recorrer grandes volúmenes de URLs en poco tiempo.


¿Cómo detectar si tenemos un problema de consumo de recursos derivado por incidencia de bots sobre wp-cron?


Si tenemos todo correctamente configurado en nuestro cPanel, solo usamos un gestor PHP, no tenemos archivos configuracion .ini u handlers en el .htaccess no correspondientes, la memoria asignada es correcta, no hay errores fatales en el error_log

Pero aun así la velocidad de carga en el wp-admin es terrible, de 5 a 6 segundos con 503 si abres varias pestañas.

No cuesta nada revisar el ancho de banda consumido.
En Sered a diferencia de otras empresas no limitamos el ancho de banda de los usuarios por lo que no se suspende el servicio pasado un limite.
Por lo que podemos encontrarnos casos asi:

Donde se puede observar un ancho de banda mensual totalmente desproporcionado.
En cualquier caso siempre que un ancho de banda mensual sea superior a 10GB aunque seamos una tienda es recomendable revisar las estadisticas de entrada.


Ya que si fueran visitas de clientes web, su propia cache debería evitar un consumo constante.

Para comprobarlo basta con revisar los datos en Webalizer, ahí lo normal al seleccionar el mes y el top por kb veamos que la mayoria son bots y ejecuciones del host del usuario


Básicamente estos nuevos robots (IA), ejecutan JS, cambian cosas (colores, combinaciones, etc) y empiezan a realizarse peticiones que hacen que el wp-cron inicialice pero sin contenido/instrucciones se va apilando con cada nueva instrucciones terminando en un desbordamiento.



¿Por qué es mejor desactivar wp-cron y usar Cronjobs?

La solución recomendada en entornos profesionales es desactivar wp-cron desde wp-config.php y delegar su ejecución a un cron real del sistema (cronjob).

Basta con añadir esta instrucción dentro de su archivo wp-config.php para evitar que wp-cron se ejecute en cada visita: define('DISABLE_WP_CRON', true);

Y posteriormente se programa una tarea en el crontab del servidor (por ejemplo, cada 30 minutos) que ejecute wp-cron.php de forma controlada.
https://guias.sered.net/es/articles/517519-como-llevar-a-cabo-la-creacion-y-gestion-de-cron-jobs-en-cpanel
​​​
La forma más sencilla de modificar el archivo wp-config.php y crear el CronJob en cPanel de manera automática, es haciendo click en "Take over wp-cron.php" desde el WP Toolkit

Las ventajas de este enfoque son claras:

  • Ejecución predecible: las tareas se lanzan solo cuando toca, no en cada visita.

  • Ahorro de recursos: se elimina el impacto directo del tráfico (humano o bot) sobre el cron.

  • Mejor rendimiento global: menos procesos PHP innecesarios.

  • Mayor estabilidad: especialmente importante frente a crawlers agresivos, incluidos los de IA.

  • Escalabilidad: el sistema aguanta mejor picos de tráfico y exploración automatizada.


Conclusión

En el contexto actual, donde los bots de IA son una realidad permanente, la combinación de robots.txt bien definido y una gestión correcta del cron en WordPress deja de ser una optimización opcional para convertirse en una medida esencial de rendimiento y protección del servidor.

Controlar quién accede al contenido y evitar que cada visita dispare procesos internos innecesarios es clave para mantener un WordPress eficiente, estable y preparado para el ecosistema de la inteligencia artificial moderna.



Si encuentras cualquier dificultad o tienes alguna pregunta, no dudes en contactar con nuestro equipo de soporte técnico a través de la dirección de correo electrónico [email protected] o mediante el chat en vivo desde tu área de clientes para obtener asistencia adicional.

¿Ha quedado contestada tu pregunta?