Cómo hacer que tu sitio web sea visible para los chatbots de IA
Los chatbots de IA como ChatGPT, Claude y Perplexity utilizan tu sitio web como fuente al responder a las consultas de los usuarios. Pero muchos sitios web son invisibles para estos sistemas, no porque el contenido sea deficiente, sino porque técnicamente es inaccesible. Esta guía te ofrece un plan de implementación completo para que tu sitio web sea visible y comprensible para los sistemas de IA.
¿Qué significa "visibilidad para los chatbots de IA"?
La visibilidad para la IA tiene dos dimensiones:
1. Accesibilidad técnica — ¿Pueden los sistemas de IA rastrear y leer tu contenido?
2. Comprensibilidad semántica — ¿Pueden los sistemas de IA comprender qué ofrece tu marca y en qué contexto es relevante?
Este artículo se centra en ambas con implementaciones concretas.
Paso 1: Ábrete a los rastreadores de IA
Permite los rastreadores de IA en robots.txt
Tu primer paso es asegurarte de que los rastreadores de IA no estén bloqueados. Añade estas líneas a tu robots.txt:
Pruébalo: Visita https://yourwebsite.com/robots.txt y verifica que estas líneas existan.
Implementa Crawl-Delay solo si es necesario
Si tu sitio recibe demasiadas solicitudes de rastreadores, puedes establecer un retraso:
Pero evita esto a menos que realmente experimentes una sobrecarga en el servidor. Los rastreadores de IA suelen ser respetuosos.
Paso 2: Estructura tu contenido con HTML semántico
Los sistemas de IA leen HTML e intentan comprender la jerarquía. Utiliza etiquetas semánticas de HTML5 correctas.
Utiliza una jerarquía de encabezados correcta
Mal ejemplo:
<div class="title">Our Services</div>
<div class="subtitle">Web Design</div>
<div class="title">Our Services</div>
<div class="subtitle">Web Design</div>
<div class="title">Our Services</div>
<div class="subtitle">Web Design</div>
Buen ejemplo:
<h1>Our Services</h1>
<h2>Web Design</h2>
<h1>Our Services</h1>
<h2>Web Design</h2>
<h1>Our Services</h1>
<h2>Web Design</h2>
Los sistemas de IA saben que <h1> es el tema principal y <h2> son las subsecciones. Los divs con clases no aportan semántica.
Utiliza etiquetas semánticas de HTML5
<header>
<nav>...</nav>
</header>
<main>
<article>
<h1>Article heading</h1>
<p>Lead paragraph...</p>
<section>
<h2>Section heading</h2>
<p>Content...</p>
</section>
</article>
</main>
<aside>
<h3>Related content</h3>
</aside>
<footer>
<p>Contact information</p>
</footer><header>
<nav>...</nav>
</header>
<main>
<article>
<h1>Article heading</h1>
<p>Lead paragraph...</p>
<section>
<h2>Section heading</h2>
<p>Content...</p>
</section>
</article>
</main>
<aside>
<h3>Related content</h3>
</aside>
<footer>
<p>Contact information</p>
</footer><header>
<nav>...</nav>
</header>
<main>
<article>
<h1>Article heading</h1>
<p>Lead paragraph...</p>
<section>
<h2>Section heading</h2>
<p>Content...</p>
</section>
</article>
</main>
<aside>
<h3>Related content</h3>
</aside>
<footer>
<p>Contact information</p>
</footer>Por qué es importante:
<article> señala contenido independiente
<section> agrupa contenido relacionado
<aside> marca contenido complementario
<nav> identifica la navegación
Los sistemas de IA utilizan estas señales para comprender qué es contenido principal frente a la navegación o los anuncios.
Paso 3: Implementa datos estructurados con JSON-LD
JSON-LD es la herramienta más potente para ayudar a la IA a entender tu marca.
Esquema de Organización
Añade esto en el <head> de tu página de inicio:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company Name",
"url": "https://yourwebsite.com",
"logo": "https://yourwebsite.com/logo.png",
"description": "We deliver X to Y by doing Z",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+45-12-34-56-78",
"contactType": "Customer Service",
"areaServed": "DK",
"availableLanguage": ["Danish", "English"]
},
"sameAs": [
"https://www.linkedin.com/company/yourcompany",
"https://twitter.com/yourcompany"
]
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company Name",
"url": "https://yourwebsite.com",
"logo": "https://yourwebsite.com/logo.png",
"description": "We deliver X to Y by doing Z",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+45-12-34-56-78",
"contactType": "Customer Service",
"areaServed": "DK",
"availableLanguage": ["Danish", "English"]
},
"sameAs": [
"https://www.linkedin.com/company/yourcompany",
"https://twitter.com/yourcompany"
]
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Company Name",
"url": "https://yourwebsite.com",
"logo": "https://yourwebsite.com/logo.png",
"description": "We deliver X to Y by doing Z",
"contactPoint": {
"@type": "ContactPoint",
"telephone": "+45-12-34-56-78",
"contactType": "Customer Service",
"areaServed": "DK",
"availableLanguage": ["Danish", "English"]
},
"sameAs": [
"https://www.linkedin.com/company/yourcompany",
"https://twitter.com/yourcompany"
]
}
</script>Esquema de Producto (si vendes productos)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product name",
"description": "Product description that explains what it is and who it's for",
"brand": {
"@type": "Brand",
"name": "Your Brand"
},
"offers": {
"@type": "Offer",
"price": "499.00",
"priceCurrency": "DKK",
"availability": "https://schema.org/InStock"
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product name",
"description": "Product description that explains what it is and who it's for",
"brand": {
"@type": "Brand",
"name": "Your Brand"
},
"offers": {
"@type": "Offer",
"price": "499.00",
"priceCurrency": "DKK",
"availability": "https://schema.org/InStock"
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product name",
"description": "Product description that explains what it is and who it's for",
"brand": {
"@type": "Brand",
"name": "Your Brand"
},
"offers": {
"@type": "Offer",
"price": "499.00",
"priceCurrency": "DKK",
"availability": "https://schema.org/InStock"
}
}
</script>Esquema de Artículo (para publicaciones de blog)
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article headline",
"description": "Short description of the article",
"author": {
"@type": "Person",
"name": "Author Name"
},
"datePublished": "2024-01-15",
"dateModified": "2024-01-20",
"publisher": {
"@type": "Organization",
"name": "Your Website Name",
"logo": {
"@type": "ImageObject",
"url": "https://yourwebsite.com/logo.png"
}
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article headline",
"description": "Short description of the article",
"author": {
"@type": "Person",
"name": "Author Name"
},
"datePublished": "2024-01-15",
"dateModified": "2024-01-20",
"publisher": {
"@type": "Organization",
"name": "Your Website Name",
"logo": {
"@type": "ImageObject",
"url": "https://yourwebsite.com/logo.png"
}
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article headline",
"description": "Short description of the article",
"author": {
"@type": "Person",
"name": "Author Name"
},
"datePublished": "2024-01-15",
"dateModified": "2024-01-20",
"publisher": {
"@type": "Organization",
"name": "Your Website Name",
"logo": {
"@type": "ImageObject",
"url": "https://yourwebsite.com/logo.png"
}
}
}
</script>Prueba tu implementación:
Paso 4: Optimiza para la legibilidad
Escribe de forma clara y estructurada
Los sistemas de IA prefieren contenidos claros y bien estructurados. Evita:
Relleno y lenguaje de marketing sin sustancia
Saturación de palabras clave (keyword stuffing)
Declaraciones vagas sin detalles específicos
Mal:
"Somos el proveedor líder del sector en soluciones innovadoras que transforman tu presencia digital."
Bien:
"Creamos sitios web de comercio electrónico para pymes en Escandinavia. Nuestra plataforma gestiona más de 10 000 productos y se integra con Shopify, WooCommerce y Magento."
Utiliza listas para información práctica
A la IA le encantan las listas: son fáciles de analizar y citar.
Ejemplo:
<h2>Our services include:</h2>
<ul>
<li>Web design and UI/UX optimization</li>
<li>E-commerce development (Shopify, WooCommerce)</li>
<li>SEO and technical optimization</li>
<li>Hosting and maintenance</li>
</ul>
<h2>Our services include:</h2>
<ul>
<li>Web design and UI/UX optimization</li>
<li>E-commerce development (Shopify, WooCommerce)</li>
<li>SEO and technical optimization</li>
<li>Hosting and maintenance</li>
</ul>
<h2>Our services include:</h2>
<ul>
<li>Web design and UI/UX optimization</li>
<li>E-commerce development (Shopify, WooCommerce)</li>
<li>SEO and technical optimization</li>
<li>Hosting and maintenance</li>
</ul>
Incluye casos de uso y ejemplos
Cuando la IA necesita recomendar soluciones, busca casos de uso.
<h2>Who uses our platform?</h2>
<ul>
<li><strong>Retail:</strong> Store chains that need to sync inventory across 50+ stores</li>
<li><strong>SaaS companies:</strong> Startups that need scalable infrastructure from day one</li>
<li><strong>Industry:</strong> Manufacturing companies with complex supply chains</li>
</ul>
<h2>Who uses our platform?</h2>
<ul>
<li><strong>Retail:</strong> Store chains that need to sync inventory across 50+ stores</li>
<li><strong>SaaS companies:</strong> Startups that need scalable infrastructure from day one</li>
<li><strong>Industry:</strong> Manufacturing companies with complex supply chains</li>
</ul>
<h2>Who uses our platform?</h2>
<ul>
<li><strong>Retail:</strong> Store chains that need to sync inventory across 50+ stores</li>
<li><strong>SaaS companies:</strong> Startups that need scalable infrastructure from day one</li>
<li><strong>Industry:</strong> Manufacturing companies with complex supply chains</li>
</ul>
Cuando alguien pregunta: "¿Qué CMS recomiendas para una cadena de tiendas?", la IA ahora puede citarte con precisión.
Paso 5: Crea un mapa del sitio XML (Sitemap)
Un mapa del sitio ayuda a los rastreadores a encontrar todo tu contenido.
Genera un mapa del sitio
Mapa del sitio mínimo:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yourwebsite.com/</loc>
<lastmod>2024-01-20</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>https://yourwebsite.com/about-us/</loc>
<lastmod>2024-01-15</lastmod>
<priority>0.8</priority>
</url>
<url>
<loc>https://yourwebsite.com/products/</loc>
<lastmod>2024-01-18</lastmod>
<priority>0.9</priority>
</url>
</urlset><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yourwebsite.com/</loc>
<lastmod>2024-01-20</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>https://yourwebsite.com/about-us/</loc>
<lastmod>2024-01-15</lastmod>
<priority>0.8</priority>
</url>
<url>
<loc>https://yourwebsite.com/products/</loc>
<lastmod>2024-01-18</lastmod>
<priority>0.9</priority>
</url>
</urlset><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://yourwebsite.com/</loc>
<lastmod>2024-01-20</lastmod>
<priority>1.0</priority>
</url>
<url>
<loc>https://yourwebsite.com/about-us/</loc>
<lastmod>2024-01-15</lastmod>
<priority>0.8</priority>
</url>
<url>
<loc>https://yourwebsite.com/products/</loc>
<lastmod>2024-01-18</lastmod>
<priority>0.9</priority>
</url>
</urlset>Guárdalo como: sitemap.xml en tu directorio raíz.
Añade el mapa del sitio a robots.txt
Automatiza las actualizaciones
Si usas WordPress, instala un plugin de mapa del sitio (Yoast SEO, RankMath).
Para sitios personalizados, genera el mapa del sitio automáticamente con las actualizaciones de contenido:
import xml.etree.ElementTree as ET
from datetime import datetime
def generate_sitemap(urls):
urlset = ET.Element('urlset', xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
for url_data in urls:
url = ET.SubElement(urlset, 'url')
loc = ET.SubElement(url, 'loc')
loc.text = url_data['url']
lastmod = ET.SubElement(url, 'lastmod')
lastmod.text = datetime.now().strftime('%Y-%m-%d')
priority = ET.SubElement(url, 'priority')
priority.text = str(url_data.get('priority', 0.5))
tree = ET.ElementTree(urlset)
tree.write('sitemap.xml', encoding='UTF-8', xml_declaration=True)
urls = [
{'url': 'https://yourwebsite.com/', 'priority': 1.0},
{'url': 'https://yourwebsite.com/products/', 'priority': 0.9}
]
generate_sitemap(urls)
import xml.etree.ElementTree as ET
from datetime import datetime
def generate_sitemap(urls):
urlset = ET.Element('urlset', xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
for url_data in urls:
url = ET.SubElement(urlset, 'url')
loc = ET.SubElement(url, 'loc')
loc.text = url_data['url']
lastmod = ET.SubElement(url, 'lastmod')
lastmod.text = datetime.now().strftime('%Y-%m-%d')
priority = ET.SubElement(url, 'priority')
priority.text = str(url_data.get('priority', 0.5))
tree = ET.ElementTree(urlset)
tree.write('sitemap.xml', encoding='UTF-8', xml_declaration=True)
urls = [
{'url': 'https://yourwebsite.com/', 'priority': 1.0},
{'url': 'https://yourwebsite.com/products/', 'priority': 0.9}
]
generate_sitemap(urls)
import xml.etree.ElementTree as ET
from datetime import datetime
def generate_sitemap(urls):
urlset = ET.Element('urlset', xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
for url_data in urls:
url = ET.SubElement(urlset, 'url')
loc = ET.SubElement(url, 'loc')
loc.text = url_data['url']
lastmod = ET.SubElement(url, 'lastmod')
lastmod.text = datetime.now().strftime('%Y-%m-%d')
priority = ET.SubElement(url, 'priority')
priority.text = str(url_data.get('priority', 0.5))
tree = ET.ElementTree(urlset)
tree.write('sitemap.xml', encoding='UTF-8', xml_declaration=True)
urls = [
{'url': 'https://yourwebsite.com/', 'priority': 1.0},
{'url': 'https://yourwebsite.com/products/', 'priority': 0.9}
]
generate_sitemap(urls)Paso 6: Elimina barreras técnicas
Haz que el contenido sea accesible sin JavaScript
Muchos rastreadores de IA tienen soporte limitado para JavaScript. Renderiza en el servidor el contenido crítico.
Prueba:
curl -A "GPTBot/1.0" https://yourwebsite.com/ | grep -o "<h1>.*</h1>"
curl -A "GPTBot/1.0" https://yourwebsite.com/ | grep -o "<h1>.*</h1>"
curl -A "GPTBot/1.0" https://yourwebsite.com/ | grep -o "<h1>.*</h1>"
Si no ves tu contenido, es un problema.
Solución:
Renderizado en el servidor (Next.js, Nuxt, SvelteKit)
Prerrenderizado de páginas importantes
Mejora progresiva
Evita muros de pago y requisitos de inicio de sesión en el contenido público
Si tu contenido requiere iniciar sesión, la IA no podrá rastrearlo.
Solución para contenido híbrido:
Ofrece versiones de "vista previa" sin inicio de sesión, pero con limitaciones:
<div class="article-preview">
<p>This is the first 3 paragraphs... <a href="/login">Read more (requires login)</a></p>
</div>
<div class="article-preview">
<p>This is the first 3 paragraphs... <a href="/login">Read more (requires login)</a></p>
</div>
<div class="article-preview">
<p>This is the first 3 paragraphs... <a href="/login">Read more (requires login)</a></p>
</div>
Optimiza los tiempos de respuesta
Los sitios lentos no se rastrean a fondo.
Objetivos:
TTFB (Time To First Byte): < 600 ms
LCP (Largest Contentful Paint): < 2.5 s
CLS (Cumulative Layout Shift): < 0.1
Pruébalo con:
Paso 7: Crea contenido de autoridad
Añade información del autor
Los sistemas de IA valoran el contenido de autoridad.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"author": {
"@type": "Person",
"name": "Jane Doe",
"jobTitle": "CTO",
"url": "https://yourwebsite.com/about/jane-doe",
"sameAs": [
"https://linkedin.com/in/janedoe",
"https://twitter.com/janedoe"
]
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"author": {
"@type": "Person",
"name": "Jane Doe",
"jobTitle": "CTO",
"url": "https://yourwebsite.com/about/jane-doe",
"sameAs": [
"https://linkedin.com/in/janedoe",
"https://twitter.com/janedoe"
]
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"author": {
"@type": "Person",
"name": "Jane Doe",
"jobTitle": "CTO",
"url": "https://yourwebsite.com/about/jane-doe",
"sameAs": [
"https://linkedin.com/in/janedoe",
"https://twitter.com/janedoe"
]
}
}
</script>Enlaza a fuentes de autoridad
Cuando afirmes algo, enlaza a las fuentes:
<p>
According to <a href="https://openai.com/research/gpt-4">OpenAI's GPT-4 technical report</a>,
the model can handle contexts of up to 32,000 tokens.
</p>
<p>
According to <a href="https://openai.com/research/gpt-4">OpenAI's GPT-4 technical report</a>,
the model can handle contexts of up to 32,000 tokens.
</p>
<p>
According to <a href="https://openai.com/research/gpt-4">OpenAI's GPT-4 technical report</a>,
the model can handle contexts of up to 32,000 tokens.
</p>
Los sistemas de IA confían más en el contenido cuando este cita fuentes creíbles.
Paso 8: Monitoriza y valida
Comprueba si los rastreadores de IA visitan tu sitio
Analiza los registros de tu servidor:
grep -i "GPTBot\|ClaudeBot\|CCBot"
grep -i "GPTBot\|ClaudeBot\|CCBot"
grep -i "GPTBot\|ClaudeBot\|CCBot"
¿Ves actividad de rastreadores? Si no es así, todavía existen barreras técnicas.
Comprueba cómo ve la IA tu sitio web
Simula un rastreador de IA:
Abre output.html y comprueba si tu contenido más importante es visible.
Valida los datos estructurados
Utiliza validadores para asegurarte de que tu JSON-LD es correcto:
Lista de control para la implementación
Utiliza esta lista de control para garantizar una visibilidad total para la IA:
Robots.txt actualizado — Permitir GPTBot, ClaudeBot, CCBot, PerplexityBot
HTML semántico — Utilizar <header>, <main>, <article>, <section>
Esquema JSON-LD — Implementar esquemas de Organización, Producto y Artículo
Sitemap.xml — Generar y enlazar en robots.txt
Sin barreras de JavaScript — Contenido crítico accesible sin JS
Tiempos de respuesta optimizados — TTFB < 600 ms
Lenguaje claro — Evitar el relleno, escribir de forma concreta y práctica
Enlaces internos — Enlazar entre páginas relacionadas
Contenido de autoridad — Añadir información del autor y referencias a las fuentes
Validado y probado — Utilizar validadores y probar con curl
Conclusión
La visibilidad para los chatbots de IA no consiste en "engañar" a los sistemas, sino en hacer que tu contenido sea técnicamente accesible y semánticamente comprensible. La mayoría de las implementaciones llevan menos de un día, pero el efecto es significativo: tu marca pasa a ser relevante cuando la gente pregunta a los sistemas de IA sobre soluciones en tu sector.
Empieza con robots.txt y JSON-LD: esos son los dos cambios con mayor impacto. A partir de ahí, sigue construyendo con HTML semántico y la optimización del tiempo de respuesta.