XooCode(){

Drug

Drug is a Product subtype (also inheriting from MedicalEntity via Substance) for pharmaceutical products: prescription medications, over-the-counter drugs, and biologics. With 29 properties of its own, it is the second most property-rich type after Vehicle. The properties cover active ingredients, dosage forms, warnings, interactions, pregnancy categories, and legal/prescription status.

The type hierarchy is Thing → Product → Drug (and simultaneously Thing → MedicalEntity → Substance → Drug). Google reads Drug markup for health knowledge panels and medication search features. Note: Google's health content policies apply. Drug markup does not bypass medical content review, and Google may suppress rich results for health topics regardless of markup quality.

Full example of schema.org/Drug json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/Drug
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://xoopharma.dk/products/xooped-suspension#drug",
  "@type": "Drug",
  "name": "XooPed Oral Suspension",
  "url": "https://xoopharma.dk/products/xooped-suspension",
  "description": "Pediatric ibuprofen oral suspension for fever and pain relief in children aged 3 months to 12 years. Berry-flavored, 100mg/5ml concentration.",
  "image": "https://xoopharma.dk/products/xooped-suspension/package-16x9.jpg",
  "activeIngredient": "Ibuprofen",
  "nonProprietaryName": "Ibuprofen",
  "proprietaryName": "XooPed",
  "dosageForm": "Oral Suspension",
  "drugUnit": "5 ml",
  "availableStrength": {
    "@type": "DrugStrength",
    "activeIngredient": "Ibuprofen",
    "strengthValue": "100",
    "strengthUnit": "mg"
  },
  "administrationRoute": "Oral",
  "prescriptionStatus": "https://schema.org/OTC",
  "isAvailableGenerically": true,
  "pregnancyWarning": "Not recommended during the third trimester of pregnancy. Consult a physician before use during pregnancy.",
  "breastfeedingWarning": "Passes into breast milk in small amounts. Consult a physician.",
  "alcoholWarning": "Avoid alcohol while taking this medication.",
  "foodWarning": "Take with food or milk to reduce stomach irritation.",
  "interactingDrug": {
    "@type": "Drug",
    "name": "Aspirin",
    "nonProprietaryName": "Acetylsalicylic acid"
  },
  "manufacturer": {
    "@type": "Organization",
    "name": "Xoo Pharma ApS",
    "url": "https://xoopharma.dk"
  },
  "offers": {
    "@type": "Offer",
    "price": "89.00",
    "priceCurrency": "DKK",
    "availability": "https://schema.org/InStock",
    "url": "https://xoopharma.dk/products/xooped-suspension/buy"
  }
}
</script>

activeIngredient and nonProprietaryName

activeIngredient is the chemical compound: "Ibuprofen", "Acetaminophen", "Amoxicillin". nonProprietaryName is the generic name (often the same as the active ingredient for single-compound drugs). proprietaryName is the brand name. Google uses all three to match the drug to knowledge graph entities and show the "Generic name" line in health panels.

dosageForm and doseSchedule

dosageForm is the physical form: "Tablet", "Capsule", "Oral Suspension", "Injectable Solution". doseSchedule takes a DoseSchedule object describing recommended dosing (frequency, dose per administration). These help Google and health aggregators match the drug to dosage-specific queries.

prescriptionStatus

prescriptionStatus takes a DrugPrescriptionStatus enum: OTC (over-the-counter) or PrescriptionOnly. Use the full schema.org URL. This tells search engines whether the drug requires a prescription, which affects how it appears in shopping and health results.

pregnancyCategory and warnings

pregnancyCategory takes a DrugPregnancyCategory enum for FDA pregnancy risk categories. pregnancyWarning, breastfeedingWarning, alcoholWarning, and foodWarning are text strings for specific warnings. Google may display these in health panels. Be accurate. Incorrect medical information in structured data can cause real harm.

Minimal valid version

The smallest markup that still produces a valid Drug entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.

schema.org/Drug (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Drug",
  "name": "XooPed Oral Suspension",
  "activeIngredient": "Ibuprofen",
  "nonProprietaryName": "Ibuprofen",
  "dosageForm": "Oral Suspension",
  "prescriptionStatus": "https://schema.org/OTC",
  "image": "https://xoopharma.dk/products/xooped-suspension/package-16x9.jpg",
  "description": "Pediatric ibuprofen oral suspension for fever and pain relief in children."
}
</script>

Google rich results this unlocks

Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.

Common Drug mistakes

Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.

  1. 01

    prescriptionStatus as a plain string

    Wrong
    "prescriptionStatus": "Over the counter"
    Right
    "prescriptionStatus": "https://schema.org/OTC"

    prescriptionStatus takes a DrugPrescriptionStatus enum value as a full schema.org URL. The values are OTC and PrescriptionOnly. Plain text descriptions are not machine-parseable.

  2. 02

    Using Product instead of Drug for a medication

    Wrong
    "@type": "Product" for a pharmaceutical product
    Right
    "@type": "Drug"

    Drug gives you 29 properties that Product does not have: activeIngredient, dosageForm, pregnancyCategory, interactingDrug, prescriptionStatus. Without the Drug type, Google cannot connect the listing to its health knowledge graph.

  3. 03

    Missing activeIngredient

    Wrong
    Drug with proprietaryName but no activeIngredient or nonProprietaryName
    Right
    "activeIngredient": "Ibuprofen", "nonProprietaryName": "Ibuprofen"

    activeIngredient and nonProprietaryName are how Google matches a brand-name drug to its generic equivalent. Without them, the drug cannot be connected to the broader medication knowledge graph. Users searching for the generic name will not find your listing.

  4. 04

    Inaccurate medical warnings in structured data

    Wrong
    Copy-pasting approximate warnings or omitting known interactions
    Right
    Use exact text from the approved product labeling

    Drug markup warnings (pregnancyWarning, alcoholWarning, interactingDrug) may appear in health panels. Inaccurate medical information in structured data can cause real harm. Use the exact text from the drug's approved labeling. If in doubt, omit the warning property rather than guess.

About the example data

XooPed is a fictional pediatric fever reducer inspired by Jane Xoo's clinical work. It is manufactured by a fictional pharmaceutical company and sold at pharmacies. The interactingDrug property shows how to declare drug interactions.

Comments

Loading comments...

Leave a comment