Schema.org para restaurantes: el marcado que la IA entiende
6 min de lectura
Respuesta rápida
Schema.org es un vocabulario de datos estructurados que se añade al código de tu web para que buscadores e IA identifiquen sin ambigüedad qué es tu restaurante, qué sirve, cuándo abre y qué opinan de él. Los tipos clave son
Restaurant,MenuyFAQPage, escritos en formato JSON-LD dentro de una etiqueta<script>. Según HappyChef/Forscaler (2026), Gemini prioriza directamente el contenido de la web del local a la hora de recomendar un restaurante, y el Schema es la forma más limpia de entregarle esa información.
Si ya conoces por qué la IA necesita entender tu restaurante, esta página es la parte técnica: el código exacto que puedes copiar, adaptar y publicar hoy. Si quieres primero el mapa completo de cómo funciona la recomendación por IA, empieza por GEO: cómo hacer que la IA recomiende tu restaurante.
Qué es Schema.org y por qué le importa a la IA (no solo a Google)
Schema.org es un estándar compartido por Google, Bing, y también consultado por los rastreadores que alimentan a los modelos de lenguaje. Cuando escribes "Fabada asturiana, 14,50 €" en un párrafo de texto libre, un motor tiene que inferir que es un plato y un precio. Cuando lo marcas con MenuItem y Offer, no hay inferencia: es un dato estructurado, sin ambigüedad.
Esa diferencia importa más de lo que parece para los asistentes de IA. Según HappyChef/Forscaler (2026), Perplexity se apoya en reseñas, redes y foros, pero Gemini prioriza la web del propio local. Si tu web no tiene datos estructurados, Gemini tiene que interpretar texto plano igual que un buscador de 2010; si los tiene, lee tu carta, tus horarios y tu ubicación con la misma fiabilidad con la que lee una base de datos.
Los cuatro tipos de Schema que necesita un restaurante
| Tipo | Para qué sirve | Obligatorio |
|---|---|---|
Restaurant |
Identidad del negocio: nombre, dirección, horarios, cocina, rango de precio | Sí |
Menu / MenuItem |
Estructura la carta: secciones, platos, precios, alérgenos | Recomendado |
FAQPage |
Preguntas frecuentes con respuesta directa (alergias, reservas, parking) | Recomendado |
AggregateRating |
Resume tu valoración media y número de reseñas (normalmente dentro de Restaurant) |
Opcional pero útil |
Restaurant ya es un subtipo de LocalBusiness, así que no necesitas declarar ambos por separado: basta con Restaurant, que hereda todas las propiedades de LocalBusiness (dirección, teléfono, horario) y añade las específicas de hostelería (servesCuisine, menu, acceptsReservations).
Paso 1: marca tu negocio con Restaurant
Este es el bloque base. Va en formato JSON-LD, dentro de una etiqueta <script type="application/ld+json">.
{
"@context": "https://schema.org",
"@type": "Restaurant",
"name": "Casa Martín",
"image": "https://www.casamartin.es/images/fachada.jpg",
"url": "https://www.casamartin.es",
"telephone": "+34911234567",
"priceRange": "€€",
"servesCuisine": "Cocina asturiana",
"address": {
"@type": "PostalAddress",
"streetAddress": "Calle Mayor, 12",
"addressLocality": "Oviedo",
"postalCode": "33001",
"addressRegion": "Asturias",
"addressCountry": "ES"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 43.3603,
"longitude": -5.8448
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday"],
"opens": "12:00",
"closes": "16:30"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Friday", "Saturday"],
"opens": "12:00",
"closes": "23:30"
}
],
"menu": "https://www.casamartin.es/carta",
"acceptsReservations": "True",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.6",
"reviewCount": "312"
}
}Detalles que marcan la diferencia:
priceRangeusa símbolos (€, €€, €€€), no cifras exactas. Es lo que espera el vocabulario oficial de Schema.org (2024).openingHoursSpecificationacepta varios bloques: úsalos para reflejar que cierras entre comida y cena, no pongas un único horario continuo si no es real.aggregateRatingdebe coincidir con lo que muestra tu ficha de Google Business Profile. Si Rispia te ayuda a mantener esa media alta respondiendo reseñas, este campo se actualiza solo con la realidad de tu negocio.
Paso 2: estructura la carta con Menu y MenuItem
Aquí es donde la mayoría de restaurantes lo hace mal: publican la carta como imagen o PDF, y ni Google ni la IA pueden leer texto dentro de una foto. El Schema de menú soluciona la parte de datos estructurados, pero necesitas también texto real en HTML. Esa combinación —carta legible + Schema— la desarrollamos a fondo en Menú indexable y Schema: haz que Google (y la IA) lean tu carta.
Ejemplo de bloque Menu con una sección:
{
"@context": "https://schema.org",
"@type": "Menu",
"name": "Carta Casa Martín",
"hasMenuSection": [
{
"@type": "MenuSection",
"name": "Entrantes",
"hasMenuItem": [
{
"@type": "MenuItem",
"name": "Fabada asturiana",
"description": "Receta tradicional con compango, alubia de la Granja y chorizo casero",
"suitableForDiet": "https://schema.org/GlutenFreeDiet",
"offers": {
"@type": "Offer",
"price": "14.50",
"priceCurrency": "EUR"
}
}
]
}
]
}suitableForDiet acepta valores como GlutenFreeDiet, VeganDiet o LowLactoseDiet. Si tienes clientes que preguntan por alergias antes de reservar, marcarlo aquí evita que tengan que llamar para confirmarlo, y le da a la IA un dato objetivo que citar cuando alguien pregunta "¿tiene opciones sin gluten el restaurante X?".
Paso 3: responde preguntas frecuentes con FAQPage
Este bloque tiene doble función: SEO tradicional (rich snippet en Google, aunque reducido desde 2023) y alimento directo para asistentes de IA que buscan respuestas concretas. Si un usuario le pregunta a ChatGPT "¿el restaurante Casa Martín tiene parking?", y tu web tiene esa pregunta marcada con FAQPage, la respuesta está lista para citar.
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "¿Tenéis parking cerca?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Sí, hay un parking público a 50 metros en la Calle del Rosal, con capacidad para 80 vehículos."
}
},
{
"@type": "Question",
"name": "¿Aceptáis reservas para grupos grandes?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Sí, aceptamos grupos de hasta 20 personas con reserva previa de al menos 48 horas por teléfono."
}
}
]
}Para saber qué preguntas exactas está haciendo la gente sobre restaurantes a los asistentes de IA (y cómo redactarlas para que puedan citarte), tienes el listado completo en Preguntas frecuentes que la gente le hace a la IA sobre restaurantes (y cómo responderlas en tu web).
Dónde va el código y cómo lo compruebas
- Ubicación: el bloque
<script type="application/ld+json">va dentro del<head>de la página HTML (recomendado) o justo antes de cerrar el<body>. Google acepta ambas ubicaciones según su documentación de datos estructurados (2024). - Una etiqueta por tipo, o combinadas: puedes meter varios objetos Schema en el mismo script usando un array
@graph, o poner un<script>distinto por cada tipo. Para un restaurante sencillo, lo más limpio es unRestauranten la home y unMenuen la página de la carta. - Verificación: usa la Prueba de resultados enriquecidos de Google pegando la URL de tu web. Te dirá si el marcado es válido y qué elementos enriquecidos puede generar. Complementa con el validador oficial de Schema.org (validator.schema.org), que comprueba la sintaxis sin depender de las reglas específicas de Google.
- Revisión periódica: entra en Google Search Console → Mejoras → Resultados enriquecidos, y revisa si aparecen errores. Un cambio de plantilla en tu web puede romper el Schema sin que te enteres hasta meses después.
Errores comunes al implementar Schema en un restaurante
- Copiar el JSON-LD de otro restaurante sin cambiar la dirección o el
geo. Google lo detecta como dato inconsistente con tu Google Business Profile y puede ignorar el marcado. - Declarar un
aggregateRatingque no coincide con tu nota real en Google. Si tu ficha muestra 4,2 y tu Schema dice 4,8, es una discrepancia que puede penalizarte en confianza, y es fácilmente verificable por cualquiera. - Poner el Schema solo en la home y olvidar la página de la carta. El
Menudebe vivir en la URL donde está el contenido real de los platos, no solo referenciado desde otra parte. - No actualizar horarios especiales (Navidad, agosto, festivos). Un
openingHoursSpecificationdesactualizado hace que Google o una IA digan que estás abierto cuando no lo estás, lo que genera clientes frustrados en la puerta. - Usar
FAQPagecon preguntas genéricas de plantilla ("¿Qué es un restaurante?") en vez de preguntas reales que hacen tus clientes. Un LLM prioriza contenido específico y verificable sobre relleno genérico.
El Schema estructura tu web para que Google y la IA entiendan tu carta y tus horarios sin adivinar. Pero de nada sirve tener el marcado perfecto si tu aggregateRating muestra una nota mediocre porque las reseñas se acumulan sin respuesta. Rispia estructura la otra mitad de la ecuación: responde tus reseñas de Google con IA, cuidando que tu media suba y se mantenga, para que el dato que citan los asistentes de IA sea uno del que te puedas fiar.