He construido sitios de directorios médicos para sistemas de salud multi-ubicación, prácticas de dermatología en solitario y todo lo que hay en medio. Y la oportunidad más grande que veo en los sitios web de atención médica es datos estructurados. No el tipo genérico de LocalBusiness -- estoy hablando de los tipos específicos Physician y MedicalSpecialty que le dicen a Google exactamente qué hace un proveedor, dónde ejerce y por qué los pacientes deberían confiar en ellos.

La mayoría de los sitios web de prácticas médicas se envían sin markup de schema o, peor aún, con markup incorrecto generado por algún plugin de WordPress que trata una práctica de cardiología igual que una pizzería. Esta guía te proporciona JSON-LD listo para producción para especialidades médicas reales -- cardiología, pediatría, urología, ortopedia y más -- junto con el razonamiento detrás de cada elección de propiedad.

Tabla de Contenidos

Medical Practice Schema Markup: JSON-LD para Cada Especialidad Médica

Por Qué El Markup De Schema Médico Importa En 2026

Las Descripciones Generales de IA de Google ahora dominan las consultas de atención médica. Cuando un paciente busca "cardiólogo que acepte pacientes nuevos cerca de mí", Google ya no solo analiza el texto de tu página -- lee tus datos estructurados para construir relaciones de entidades, completar paneles de conocimiento y alimentar respuestas generadas por IA.

Aquí está lo que el markup correcto de schema médico puede activar:

Tipo De Resultado Enriquecido Activado Por Impacto
Fragmentos de reseña AggregateRating en Physician Calificaciones de estrellas en SERPs
Panel de conocimiento Physician + links sameAs Presencia de marca para médicos nombrados
Mejora del paquete local MedicalClinic + openingHours Detalles de listado en el mapa
Resultados enriquecidos de Preguntas Frecuentes Schema FAQPage (sitios de salud aún elegibles) Espacio ampliado en SERP
Citaciones en Descripción General de IA Gráfico de entidad completo Citado como fuente en respuestas de IA

Un estudio de BrightLocal 2025 encontró que listados de atención médica con fragmentos de reseña vieron tasas de clics 37% más altas que aquellos sin. Y la investigación de Schema App confirmó que páginas de médicos con datos estructurados completos tenían 2,8 veces más probabilidades de aparecer en citaciones de Descripciones Generales de IA.

En conclusión: si tus páginas de médicos no tienen markup de schema adecuado, estás dejando visibilidad sobre la mesa.

Tipos Schema.org Para Prácticas Médicas

Antes de escribir código, entendamos la jerarquía de tipos. Schema.org nos proporciona varios tipos que son relevantes para la atención médica, y elegir el correcto importa.

Thing
└── Organization
    └── LocalBusiness
        └── MedicalBusiness
            ├── MedicalClinic
            ├── Optician
            ├── Pharmacy
            └── Physician

Physician es un subtipo de MedicalBusiness, que en sí mismo es un subtipo de LocalBusiness. Esto es importante porque significa que una entidad Physician hereda todas las propiedades de negocio local (dirección, horas, coordenadas geo) más propiedades específicas médicas como medicalSpecialty y hospitalAffiliation.

Para el sitio web de un profesional en solitario, Physician es tu tipo principal. Para una clínica multi-proveedor, querrás una MedicalClinic o MedicalOrganization como entidad padre con entradas Physician individuales anidadas o vinculadas a través de member o referenciadas en páginas separadas.

Cuándo Usar Qué

Tu Configuración Tipo Principal Tipos Secundarios
Doctor solo, una ubicación Physician MedicalOrganization (opcional)
Práctica grupal, una ubicación MedicalClinic Physician por página de proveedor
Sistema de salud, múltiples ubicaciones MedicalOrganization MedicalClinic por ubicación, Physician por proveedor
Hospital Hospital Physician, MedicalClinic (departamentos)

Entendiendo Los Valores De Enumeración De MedicalSpecialty

La propiedad medicalSpecialty acepta valores de la enumeración MedicalSpecialty de Schema.org. Estos no son campos de texto libre -- son valores específicos y predefinidos. Aquí están los que usarás con más frecuencia:

Especialidad Valor Schema.org Notas
Cardiología Cardiovascular Cubre cardiología y cirugía cardiovascular
Pediatría Pediatric Pediatría general
Urología Urologic Incluye urología pediátrica
Dermatología Dermatology También variante DermatologyLaserSurgery
Ortopedia Musculoskeletal La cirugía ortopédica cae aquí
Neurología Neurological Distinto de Psychiatric
Obstetricia Y Ginecología Obstetric y/o Gynecologic Puede especificar ambos
Medicina De Emergencia Emergency Médicos de ER
Medicina Familiar PrimaryCare Práctica general, medicina familiar
Oncología Oncologic Tratamiento del cáncer
Neumología Pulmonary Pulmón y respiratorio
Gastroenterología Gastroenterologic Especialistas en GI
Endocrinología Endocrine Diabetes, tiroides, etc.
Oftalmología Optometric Cuidado de ojos
Psiquiatría Psychiatric Médicos de salud mental

Una lista completa está disponible en schema.org/MedicalSpecialty. Ten en cuenta que algunas especialidades se asignan a categorías más amplias de lo que podrías esperar -- no hay valor separado para "Cardiología Intervencionista", por ejemplo. Usarías Cardiovascular y describirías la subespecialidad en las propiedades description o knowsAbout del médico.

Medical Practice Schema Markup: JSON-LD para Cada Especialidad Médica - arquitectura

Plantilla Base JSON-LD De Physician

Aquí hay una plantilla inicial sólida para cualquier página de médico. Anotaré las decisiones clave.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Physician",
  "@id": "https://example.com/doctors/jane-smith#physician",
  "name": "Dr. Jane Smith, MD, FACC",
  "image": "https://example.com/images/dr-jane-smith.jpg",
  "url": "https://example.com/doctors/jane-smith",
  "telephone": "+1-555-867-5309",
  "description": "Cardiólogo certificado por la junta especializado en cardiología intervencionista y enfermedad valvular estructural con 15 años de experiencia clínica.",
  "medicalSpecialty": "https://schema.org/Cardiovascular",
  "isAcceptingNewPatients": true,
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "450 Heart Center Drive, Suite 200",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 30.2672,
    "longitude": -97.7431
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "08:00",
      "closes": "17:00"
    }
  ],
  "sameAs": [
    "https://www.healthgrades.com/physician/dr-jane-smith",
    "https://www.doximity.com/pub/jane-smith-md",
    "https://www.linkedin.com/in/drjanesmith"
  ],
  "alumniOf": {
    "@type": "CollegeOrUniversity",
    "name": "Johns Hopkins University School of Medicine"
  },
  "hasCredential": [
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "Board Certification",
      "name": "American Board of Internal Medicine - Cardiovascular Disease"
    }
  ],
  "hospitalAffiliation": {
    "@type": "Hospital",
    "name": "St. David's Medical Center",
    "url": "https://stdavids.com"
  },
  "worksFor": {
    "@type": "MedicalOrganization",
    "@id": "https://example.com/#organization",
    "name": "Austin Heart Specialists"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "reviewCount": "142",
    "bestRating": "5"
  }
}
</script>

Algunas cosas que quiero señalar:

  • @id: Esto crea un identificador único para esta entidad. Usa la URL de la página más un fragmento. Esto se vuelve crítico cuando vinculas médicos a organizaciones entre páginas.
  • medicalSpecialty: Estoy usando la forma de URL completa (https://schema.org/Cardiovascular) en lugar de solo la cadena. Ambas funcionan, pero la forma de URL es más explícita.
  • isAcceptingNewPatients: Esta es una propiedad más nueva específica de Physician. Úsala. Los pacientes la buscan constantemente.
  • sameAs: Vincula a perfiles de terceros verificados. Así es como Google construye confianza en la entidad y potencialmente activa paneles de conocimiento.
  • aggregateRating: Solo incluye esto si muestras reseñas visiblemente en la página. Las directrices de Google son estrictas en esto -- las calificaciones ocultas violan sus políticas.

Ejemplos JSON-LD Específicos Por Especialidad

Vamos a construir ejemplos para las especialidades que la gente realmente busca.

Cardiología (Cardiovascular)

{
  "@context": "https://schema.org",
  "@type": "Physician",
  "name": "Dr. Robert Chen, MD, FACC",
  "medicalSpecialty": "https://schema.org/Cardiovascular",
  "knowsAbout": [
    "Interventional Cardiology",
    "Cardiac Catheterization",
    "Coronary Artery Disease",
    "Heart Failure Management",
    "Echocardiography"
  ],
  "availableService": [
    {
      "@type": "MedicalProcedure",
      "name": "Cardiac Catheterization",
      "procedureType": "https://schema.org/PercutaneousProcedure"
    },
    {
      "@type": "MedicalTest",
      "name": "Stress Echocardiography"
    },
    {
      "@type": "MedicalTest",
      "name": "Electrocardiogram (ECG/EKG)"
    }
  ]
}

La propiedad availableService es única de Physician y te permite especificar procedimientos y pruebas exactas. Para cardiología, esta distinción entre MedicalProcedure y MedicalTest se asigna naturalmente a la división intervencionista vs. diagnóstica.

Pediatría

{
  "@context": "https://schema.org",
  "@type": "Physician",
  "name": "Dr. Maria Gonzalez, MD, FAAP",
  "medicalSpecialty": "https://schema.org/Pediatric",
  "knowsAbout": [
    "Well-Child Visits",
    "Childhood Immunizations",
    "Developmental Screening",
    "Adolescent Medicine",
    "Newborn Care"
  ],
  "availableService": [
    {
      "@type": "MedicalTherapy",
      "name": "Pediatric Vaccination Program"
    },
    {
      "@type": "MedicalTest",
      "name": "Developmental Milestone Assessment"
    }
  ],
  "hasCredential": [
    {
      "@type": "EducationalOccupationalCredential",
      "credentialCategory": "Board Certification",
      "name": "American Board of Pediatrics"
    }
  ]
}

La pediatría es interesante porque el valor MedicalSpecialty es solo Pediatric -- no hay valor separado para subespecialidades pediátricas como cardiología pediátrica. Para un cardiólogo pediátrico, incluirías ambas especialidades:

"medicalSpecialty": [
  "https://schema.org/Pediatric",
  "https://schema.org/Cardiovascular"
]

Sí, medicalSpecialty acepta un array. Úsalo.

Urología

{
  "@context": "https://schema.org",
  "@type": "Physician",
  "name": "Dr. Michael Torres, MD, FACS",
  "medicalSpecialty": "https://schema.org/Urologic",
  "knowsAbout": [
    "Robotic-Assisted Surgery",
    "Prostate Cancer Treatment",
    "Kidney Stone Management",
    "Urinary Incontinence",
    "Male Infertility"
  ],
  "availableService": [
    {
      "@type": "MedicalProcedure",
      "name": "Robot-Assisted Laparoscopic Prostatectomy",
      "procedureType": "https://schema.org/SurgicalProcedure"
    },
    {
      "@type": "MedicalProcedure",
      "name": "Extracorporeal Shock Wave Lithotripsy (ESWL)",
      "procedureType": "https://schema.org/NoninvasiveProcedure"
    },
    {
      "@type": "MedicalTest",
      "name": "Cystoscopy"
    }
  ]
}

Ortopedia

{
  "@context": "https://schema.org",
  "@type": "Physician",
  "name": "Dr. Sarah Kim, MD",
  "medicalSpecialty": "https://schema.org/Musculoskeletal",
  "knowsAbout": [
    "Total Joint Replacement",
    "Sports Medicine",
    "Arthroscopic Surgery",
    "Fracture Care",
    "Rotator Cuff Repair"
  ],
  "availableService": [
    {
      "@type": "MedicalProcedure",
      "name": "Total Knee Arthroplasty",
      "procedureType": "https://schema.org/SurgicalProcedure"
    },
    {
      "@type": "MedicalProcedure",
      "name": "Arthroscopic ACL Reconstruction",
      "procedureType": "https://schema.org/SurgicalProcedure"
    }
  ]
}

Observa que el valor medicalSpecialty es Musculoskeletal, no "Orthopedic". Esto confunde a la gente constantemente.

Schema MedicalOrganization Y MedicalClinic

Tu schema a nivel organizacional es la base. Cada entidad de médico debe hacer referencia a él. Aquí hay un ejemplo completo de MedicalClinic:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "MedicalClinic",
  "@id": "https://example.com/#clinic",
  "name": "Austin Heart Specialists",
  "url": "https://example.com",
  "logo": "https://example.com/images/logo.png",
  "image": "https://example.com/images/clinic-exterior.jpg",
  "telephone": "+1-555-867-5309",
  "medicalSpecialty": "https://schema.org/Cardiovascular",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "450 Heart Center Drive",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78701",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 30.2672,
    "longitude": -97.7431
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:30",
      "closes": "17:30"
    }
  ],
  "availableService": [
    {
      "@type": "MedicalTest",
      "name": "Cardiac Stress Testing"
    },
    {
      "@type": "MedicalProcedure",
      "name": "Cardiac Catheterization"
    }
  ],
  "member": [
    {
      "@type": "Physician",
      "@id": "https://example.com/doctors/jane-smith#physician"
    },
    {
      "@type": "Physician",
      "@id": "https://example.com/doctors/robert-chen#physician"
    }
  ],
  "sameAs": [
    "https://www.facebook.com/austinheartspecialists",
    "https://www.google.com/maps/place/?q=place_id:ChIJ_____"
  ]
}
</script>

El array member usa referencias @id para vincular a entidades de médicos definidas en sus páginas individuales. Esto crea un gráfico conectado que Google puede recorrer.

Conectando Médicos A Organizaciones

Aquí es donde la mayoría de las implementaciones fallan. Necesitas referencias bidireccionales:

  1. Organización → Médico: Usa member en la página de la organización
  2. Médico → Organización: Usa worksFor en la página del médico

Ambos deben hacer referencia al mismo @id. Piénsalo como una clave externa en una base de datos. Si los IDs no coinciden, Google no puede conectarlos.

// En la página del médico:
"worksFor": {
  "@type": "MedicalClinic",
  "@id": "https://example.com/#clinic",
  "name": "Austin Heart Specialists"
}

// En la página de la organización:
"member": [
  {
    "@type": "Physician",
    "@id": "https://example.com/doctors/jane-smith#physician"
  }
]

Para prácticas multi-ubicación, cada ubicación debe ser una entidad MedicalClinic separada con su propio @id, y los médicos que ejercen en múltiples ubicaciones deben usar practicesAt (un array) en lugar de worksFor.

Si estás construyendo estos sitios en plataformas CMS headless, este tipo de modelado de datos relacional se asigna perfectamente a referencias de contenido en sistemas como Sanity o Contentful. Manejamos este patrón exacto en nuestro trabajo de desarrollo de CMS headless -- el modelo de contenido del CMS refleja el gráfico de entidades de schema.org.

Propiedades Que Construyen E-E-A-T

Los evaluadores de calidad de Google evalúan Experiencia, Experiencia, Autoridad y Confiabilidad para contenido YMYL (Tu Dinero o Tu Vida). La atención médica es la categoría YMYL más quintaesencial. Estas propiedades de schema apoyan directamente señales de E-E-A-T:

Propiedad Tipo Señal De E-E-A-T
hasCredential EducationalOccupationalCredential Experiencia
alumniOf CollegeOrUniversity Experiencia
memberOf Organization Autoridad
hospitalAffiliation Hospital Autoridad, Confianza
award Text Autoridad
knowsAbout Text o Thing Experiencia
medicalSpecialty MedicalSpecialty Experiencia
sameAs URL Confianza (verificación de referencia cruzada)
aggregateRating AggregateRating Confianza (prueba social)

Regla crítica: solo puedes marcar contenido visible en la página. Si listas certificaciones de junta en tu schema pero no las muestras en ningún lugar en la página de perfil del médico, estás violando las directrices de datos estructurados de Google. Agrega el contenido primero, luego márcalo.

Validación Y Prueba

Antes de empujar nada a producción:

  1. Prueba de Resultados Enriquecidos de Google (search.google.com/test/rich-results): Valida elegibilidad para resultados enriquecidos
  2. Validador De Markup De Schema (validator.schema.org): Comprueba sintaxis y conformidad con vocabulario Schema.org
  3. Google Search Console: Monitorea la sección "Enhancements" después del despliegue para cualquier error

Aquí está mi flujo de trabajo de prueba:

# Si estás generando schema programáticamente (Next.js, Astro, etc.)
# Saca el JSON a un archivo y valida localmente primero
node -e "const schema = require('./generate-schema.js'); console.log(JSON.stringify(schema, null, 2))" > schema-output.json

# Luego pega en validator.schema.org o usa su API

Si estás construyendo con Next.js o Astro, puedes generar estos bloques JSON-LD dinámicamente desde tus datos del CMS. Ambos frameworks manejan inyección de <script type="application/ld+json"> limpiamente -- Next.js a través del componente <Script> o next/head, Astro a través de su slot <head>.

Errores Comunes A Evitar

Usar LocalBusiness genérico en lugar de Physician. Pierdes todas las propiedades específicas médicas. Un Physician es un LocalBusiness, así que obtienes todo lo que LocalBusiness ofrece más.

Valores medicalSpecialty de texto libre. Escribir "medicalSpecialty": "Cardiology" en lugar de usar el valor de enumeración adecuado (Cardiovascular) significa que Google puede no entender la especialidad correctamente.

Coordenadas geo faltantes. Los datos de latitud/longitud ayudan a Google a asociar tu práctica con consultas basadas en ubicación. No lo omitas.

Valores @id duplicados en diferentes entidades. Cada entidad necesita un @id único. He visto implementaciones donde cada médico comparte el mismo sufijo @id -- eso rompe completamente el gráfico de entidades.

Marcar contenido que no está en la página. Esto merece repetirse. Las directrices de Google son explícitas: todo en tus datos estructurados debe corresponder a contenido visible. Las violaciones pueden resultar en acciones manuales.

Ignorar isAcceptingNewPatients. Esta es una señal de alto interés. Los pacientes filtran por esto. Inclúyelo y mantenlo actualizado.

Preguntas Frecuentes

¿Cuál es la diferencia entre los tipos de schema Physician y MedicalBusiness? Physician es un subtipo de MedicalBusiness. Usa Physician para páginas de proveedores individuales y MedicalBusiness (o más específicamente, MedicalClinic) para la práctica misma. Physician hereda todas las propiedades de MedicalBusiness y agrega las específicas del médico como hospitalAffiliation, availableService e isAcceptingNewPatients.

¿Puedo listar múltiples especialidades médicas para un médico? Sí. La propiedad medicalSpecialty acepta un array. Un médico que es tanto especialista pediátrico como cardiovascular puede listar ambos: "medicalSpecialty": ["https://schema.org/Pediatric", "https://schema.org/Cardiovascular"]. Esto es común para médicos con certificación dual.

¿El markup de schema médico mejora directamente las clasificaciones de Google? Los datos estructurados no son un factor de clasificación directo. Sin embargo, habilitaN resultados enriquecidos (calificaciones de estrellas, desplegables de Preguntas Frecuentes, paneles de conocimiento) que mejoran significativamente las tasas de clics. También alimenta la comprensión de entidades de Google, que influye en cómo tu práctica aparece en Descripciones Generales de IA y resultados de paquete local. El impacto indirecto en SEO es sustancial.

¿Qué tipo de schema debo usar para un directorio de médicos de hospital? Usa Hospital como tu entidad de nivel superior, MedicalClinic para departamentos individuales (por ejemplo, Departamento de Cardiología) y Physician para cada página de proveedor. Conéctalos con propiedades member, worksFor y department. Esto crea un gráfico organizacional completo.

¿Es JSON-LD el único formato para markup de schema médico? No -- también puedes usar Microdata o RDFa incrustado en tu HTML. Pero Google recomienda explícitamente JSON-LD y es el formato que usan en todos sus ejemplos de documentación. JSON-LD también es mucho más fácil de mantener porque está separado de tu layout de página. Puedes generarlo programáticamente desde datos del CMS sin tocar plantillas.

¿Cómo manejo a un médico que ejerce en múltiples ubicaciones? Usa la propiedad practicesAt con un array de entidades MedicalClinic u Hospital, cada una con su propio @id. No dupliques la entidad del médico en ubicaciones -- crea una entidad Physician canónica y vincúlala a múltiples ubicaciones de práctica. El schema de cada ubicación también debe hacer referencia al médico a través de member.

¿Debo incluir reseñas de pacientes en mi schema de médico? Solo si las reseñas se muestran visiblemente en la página del médico. Usa la propiedad aggregateRating en el tipo Physician e incluye ratingValue, reviewCount y bestRating. Google se toma esto en serio -- marcar reseñas ocultas o falsas puede resultar en penalizaciones manuales. Si recopila reseñas a través de plataformas de terceros como Healthgrades, vincúlate a ellas a través de sameAs en lugar.

¿Con qué frecuencia debo actualizar el markup de schema de práctica médica? Actualiza tus datos estructurados siempre que cambie la información subyacente: nuevas horas de oficina, un médico se va o se une, un proveedor deja de aceptar pacientes nuevos, o información de contacto cambia. Para prácticas que usan un CMS headless con generación de schema dinámica, esto sucede automáticamente cuando editores de contenido actualizan el CMS. Si estás codificando JSON-LD directamente, establece un ciclo de revisión trimestral como mínimo. Los datos estructurados obsoletos -- especialmente valores incorrectos de isAcceptingNewPatients o telephone -- erosionan la confianza tanto con Google como con los pacientes.