Si tienes un sitio B2B, el problema no suele ser que Google no te indexe: es que no entiende qué ofreces, a quién y por qué debería mostrarte. El structured data (datos estructurados) resuelve justo eso — y desde que los motores de respuesta con IA (ChatGPT Search, Gemini, Perplexity) construyen respuestas a partir de fuentes que consideran fiables, marcar tu web con schema ha pasado de "nice to have" a infraestructura básica.
Este post es una guía práctica con JSON-LD real que puedes copiar, adaptar y validar hoy.
Por qué JSON-LD y no Microdata
Google recomienda JSON-LD sobre Microdata o RDFa por una razón práctica: va en un solo bloque <script>, separado del HTML. No ensucias el markup, lo inyectas dinámicamente y lo testeas de forma aislada.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Tu Empresa"
}
</script>
Regla de oro: el schema debe describir lo que el usuario ve en la página. Marcar datos que no existen en el contenido visible es una vía rápida a una penalización manual.
1. Organization + LocalBusiness
La base de tu identidad. Para una empresa con oficina física, LocalBusiness (subtipo de Organization) te da elegibilidad para resultados enriquecidos locales.
{
"@context": "https://schema.org",
"@type": "ProfessionalService",
"name": "Roiting | Agencia de Marketing B2B Valencia",
"url": "https://www.roiting.com",
"telephone": "+34962736602",
"address": {
"@type": "PostalAddress",
"streetAddress": "Gran Via de les Germanies, 7",
"addressLocality": "València",
"addressRegion": "Valencia",
"postalCode": "46006",
"addressCountry": "ES"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.4634,
"longitude": -0.3762
},
"areaServed": { "@type": "Country", "name": "España" },
"priceRange": "€€"
}
Nota sobre el teléfono: usa formato E.164 (+34962736602) en el schema aunque en pantalla lo muestres como 962 73 66 02. Los parsers lo prefieren normalizado.
2. Service: describe lo que vendes
En B2B, cada servicio clave merece su propio marcado. Ayuda a los motores a asociarte con búsquedas de intención concreta.
{
"@context": "https://schema.org",
"@type": "Service",
"serviceType": "Account-Based Marketing (ABM)",
"provider": {
"@type": "Organization",
"name": "Roiting | Agencia de Marketing B2B Valencia"
},
"areaServed": "ES",
"description": "Campañas ABM para cuentas B2B de alto valor.",
"audience": {
"@type": "BusinessAudience",
"name": "Empresas B2B (industria, tecnología, servicios)"
}
}
3. FAQPage: el más rentable en B2B
Los compradores B2B llegan con preguntas. Marcar tu FAQ con schema no solo puede darte resultados enriquecidos: alimenta directamente a los motores de respuesta con IA, que extraen pares pregunta-respuesta bien estructurados.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "¿En qué se diferencia la generación de demanda del lead generation?",
"acceptedAnswer": {
"@type": "Answer",
"text": "El lead generation busca volumen de contactos. La generación de demanda crea y captura interés cualificado a lo largo de todo el ciclo, con el pipeline como objetivo."
}
},
{
"@type": "Question",
"name": "¿Cuánto tarda en verse resultados una estrategia B2B?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Con un sistema completo —estrategia, canales, automatización y medición— los primeros resultados en negocio suelen aparecer en torno a los 90 días."
}
}
]
}
4. BreadcrumbList: estructura navegable
Ayuda a los motores a entender la jerarquía de tu sitio y mejora cómo aparece la URL en los resultados.
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Inicio",
"item": "https://www.roiting.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Servicios",
"item": "https://www.roiting.com/servicios"
}
]
}
Inyectar el schema con JavaScript
Si trabajas con un SPA o quieres centralizar el schema, inyéctalo por JS. Este helper evita duplicados:
function injectSchema(schemaObject) {
// Evita insertar el mismo tipo dos veces
const type = schemaObject['@type'];
const existing = document.querySelector(
`script[data-schema-type="${type}"]`
);
if (existing) existing.remove();
const script = document.createElement('script');
script.type = 'application/ld+json';
script.dataset.schemaType = type;
script.textContent = JSON.stringify(schemaObject);
document.head.appendChild(script);
}
// Uso
injectSchema({
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: [/* ... */]
});
Conecta el schema con tu analítica
De poco sirve marcar una FAQ si no sabes si la gente interactúa con ella. Aquí el puente entre structured data y medición: dispara un evento cuando alguien abre una pregunta marcada con schema.
document.querySelectorAll('[data-faq-question]').forEach((el) => {
el.addEventListener('click', () => {
// GA4 mediante dataLayer (Google Tag Manager)
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: 'faq_interaction',
faq_question: el.dataset.faqQuestion,
page_section: 'faq_b2b'
});
});
});
Y el envío directo a GA4 sin GTM, para eventos de conversión B2B (una descarga de recurso, por ejemplo):
function trackConversion(action, params = {}) {
if (typeof gtag !== 'function') return;
gtag('event', action, {
event_category: 'b2b_engagement',
...params
});
}
// Ejemplo: descarga de un lead magnet
trackConversion('resource_download', {
resource_name: 'guia_generacion_demanda',
value: 1
});
Consejo B2B: no midas solo "leads". Instrumenta los micro-eventos que anticipan una oportunidad — descarga de caso de éxito, visita a la página de precios, tiempo en la demo. Son las señales que de verdad predicen pipeline.
Validar antes de publicar
Nunca subas schema sin validar. Tres herramientas:
- Schema Markup Validator — valida contra la spec de Schema.org.
- Rich Results Test de Google — te dice si eres elegible para resultados enriquecidos.
- Google Search Console → informe de Mejoras, para monitorizar en producción.
Snippet rápido para detectar todos los bloques JSON-LD de una página desde la consola del navegador:
[...document.querySelectorAll('script[type="application/ld+json"]')]
.map((s) => {
try { return JSON.parse(s.textContent); }
catch (e) { return { error: 'JSON inválido', raw: s.textContent }; }
})
.forEach((schema, i) => console.log(`Schema ${i + 1}:`, schema));
Checklist de implementación
- [ ]
Organization/ProfessionalServiceen todas las páginas (idealmente en el layout) - [ ]
Serviceen cada página de servicio - [ ]
FAQPagedonde tengas preguntas reales visibles - [ ]
BreadcrumbListen páginas internas - [ ] Teléfono en formato E.164 dentro del schema
- [ ] El schema refleja contenido visible (nada oculto)
- [ ] Validado en los dos validadores
- [ ] Eventos de analítica conectados a las interacciones clave
Cierre
El structured data es de las pocas optimizaciones con impacto directo tanto en SEO clásico como en visibilidad en motores de IA, y es puro trabajo técnico: lo implementas una vez, lo validas y lo mantienes. Empieza por Organization y FAQPage, mide las interacciones, e itera.
Escrito por el equipo de **Roiting, agencia de marketing B2B en València especializada en SEO técnico, generación de demanda y medición conectada con ventas. 📍 Gran Via de les Germanies, 7, L'Eixample, 46006 València · 📞 962 73 66 02
Top comments (0)