Schema Types

Eight production-ready JSON-LD templates. Replace the YOUR_... placeholders, validate, install — that's it.

Local Business

LocalBusiness

For brick-and-mortar and service-area businesses: shops, clinics, agencies, restaurants. Feeds Google's local/knowledge panel signals. Use a more specific subtype when you can (Plumber, Dentist, Restaurant…).

Key properties

  • Required: name, image, address
  • url, telephone, priceRange
  • geo (GeoCoordinates)
  • openingHoursSpecification
  • sameAs (social/GBP profiles)
  • aggregateRating + review (only if genuine)
Full annotated template →

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "YOUR_BUSINESS_NAME_HERE",
  "image": "YOUR_IMAGE_URL_HERE",
  "url": "YOUR_PAGE_URL_HERE",
  "telephone": "+1-555-555-5555",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "YOUR_STREET_ADDRESS_HERE",
    "addressLocality": "YOUR_CITY_HERE",
    "addressRegion": "YOUR_STATE_HERE",
    "postalCode": "YOUR_POSTAL_CODE_HERE",
    "addressCountry": "US"
  },
  "geo": { "@type": "GeoCoordinates",
    "latitude": 0.0, "longitude": 0.0 },
  "openingHoursSpecification": {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday",
                  "Thursday","Friday"],
    "opens": "09:00", "closes": "17:00"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8", "reviewCount": "127"
  }
}
</script>

Content

Article

For news articles, blog posts and reports. Helps Google understand headline, author and publisher — a prerequisite for article-related headline rich results.

Key properties

  • Required: headline, image
  • author (Person) + datePublished
  • publisher (Organization + logo)
  • dateModified, description
  • mainEntityOfPage (@id of the article)

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "YOUR_ARTICLE_TITLE_HERE",
  "image": "YOUR_ARTICLE_IMAGE_URL_HERE",
  "description": "YOUR_DESCRIPTION_HERE",
  "author": {
    "@type": "Person",
    "name": "YOUR_AUTHOR_NAME_HERE"
  },
  "publisher": {
    "@type": "Organization",
    "name": "YOUR_PUBLISHER_NAME_HERE",
    "logo": {
      "@type": "ImageObject",
      "url": "YOUR_LOGO_URL_HERE"
    }
  },
  "datePublished": "2026-01-15",
  "dateModified": "2026-10-19",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "YOUR_ARTICLE_URL_HERE"
  }
}
</script>

E-commerce

Product

Anything sold on a product page. Eligible for product rich results (price, availability, rating shown in search). Google deprecated the separate "Product review" rich result for single reviews — aggregate ratings still qualify.

Key properties

  • Required: name, image
  • offers → price, priceCurrency, availability
  • brand, sku, gtin/mpn
  • aggregateRating, review
  • itemCondition, url

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "YOUR_PRODUCT_NAME_HERE",
  "image": "YOUR_PRODUCT_IMAGE_URL_HERE",
  "description": "YOUR_DESCRIPTION_HERE",
  "sku": "YOUR_SKU_HERE",
  "brand": { "@type": "Brand",
    "name": "YOUR_BRAND_NAME_HERE" },
  "offers": {
    "@type": "Offer",
    "url": "YOUR_PRODUCT_URL_HERE",
    "priceCurrency": "USD",
    "price": "49.99",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6", "reviewCount": "89"
  }
}
</script>

Q&A

FAQPage

Question-and-answer content on your own page. FAQ rich results mostly appear for well-known authoritative sites, but the markup still clarifies page content for the Knowledge Graph.

Key properties

  • Required: mainEntity array
  • Question → name
  • acceptedAnswer → text
  • Answers must be visible on the page
  • Max ~5 Q&A typically displayed

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "YOUR_QUESTION_1_HERE?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "YOUR_ANSWER_1_HERE."
      }
    },
    {
      "@type": "Question",
      "name": "YOUR_QUESTION_2_HERE?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "YOUR_ANSWER_2_HERE."
      }
    }
  ]
}
</script>

Entity

Organization

Your company-level identity. Put it on the homepage with a stable @id, then reference that @id from Article publisher, BreadcrumbList and other blocks — one entity, connected site-wide.

Key properties

  • Required: name
  • logo (ImageObject or URL)
  • url, sameAs[] (all profiles)
  • contactPoint, address, telephone
  • foundingDate, slogan

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "YOUR_SITE_URL_HERE#organization",
  "name": "YOUR_ORGANIZATION_NAME_HERE",
  "url": "YOUR_SITE_URL_HERE",
  "logo": "YOUR_LOGO_URL_HERE",
  "slogan": "YOUR_SLOGAN_HERE",
  "foundingDate": "2015-04-01",
  "sameAs": [
    "YOUR_FACEBOOK_URL_HERE",
    "YOUR_LINKEDIN_URL_HERE",
    "YOUR_X_URL_HERE"
  ],
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+1-555-555-5555",
    "contactType": "customer service",
    "availableLanguage": ["English"]
  }
}
</script>

Events

Event

Concerts, classes, webinars, conferences. Eligible for event rich results with date, location and ticket info directly in search.

Key properties

  • Required: name, startDate, location
  • endDate, eventStatus, eventAttendanceMode
  • offers → price, priceCurrency, url, availability
  • performer, organizer, image

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "YOUR_EVENT_NAME_HERE",
  "startDate": "2026-11-12T18:30:00-05:00",
  "endDate": "2026-11-12T21:00:00-05:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode":
    "https://schema.org/OfflineEventAttendanceMode",
  "image": "YOUR_EVENT_IMAGE_URL_HERE",
  "location": {
    "@type": "Place",
    "name": "YOUR_VENUE_NAME_HERE",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "YOUR_STREET_ADDRESS_HERE",
      "addressLocality": "YOUR_CITY_HERE",
      "addressCountry": "US"
    }
  },
  "offers": {
    "@type": "Offer",
    "url": "YOUR_TICKET_URL_HERE",
    "price": "25.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  },
  "organizer": {
    "@type": "Organization",
    "name": "YOUR_ORGANIZER_NAME_HERE",
    "url": "YOUR_SITE_URL_HERE"
  }
}
</script>

Food

Recipe

Cooking content with ingredients and steps. Eligible for recipe rich results (rating, calories, cook time) in search and Google Assistant.

Key properties

  • Required: name, image
  • recipeIngredient[] and recipeInstructions[]
  • prepTime / cookTime / totalTime (ISO 8601: PT30M)
  • recipeYield, nutrition, author, datePublished
  • aggregateRating (if genuine)

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Recipe",
  "name": "YOUR_RECIPE_NAME_HERE",
  "image": "YOUR_RECIPE_IMAGE_URL_HERE",
  "author": { "@type": "Person",
    "name": "YOUR_AUTHOR_NAME_HERE" },
  "datePublished": "2026-02-10",
  "description": "YOUR_DESCRIPTION_HERE",
  "prepTime": "PT15M",
  "cookTime": "PT30M",
  "totalTime": "PT45M",
  "recipeYield": "4 servings",
  "recipeIngredient": [
    "INGREDIENT_1_HERE",
    "INGREDIENT_2_HERE"
  ],
  "recipeInstructions": [
    { "@type": "HowToStep",
      "text": "STEP_1_TEXT_HERE" },
    { "@type": "HowToStep",
      "text": "STEP_2_TEXT_HERE" }
  ],
  "nutrition": {
    "@type": "NutritionInformation",
    "calories": "250 calories"
  }
}
</script>

Careers

JobPosting

Open roles on a careers page. Eligible for Google for Jobs — a major source of qualified applicants. Keep validThrough accurate or the posting expires from results.

Key properties

  • Required: title, description, datePosted, hiringOrganization, jobLocation
  • validThrough, employmentType
  • baseSalary (MonetaryAmount)
  • jobLocationType for remote roles
  • incentiveCompensation, qualifications

Minimal valid example

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "YOUR_JOB_TITLE_HERE",
  "description": "YOUR_JOB_DESCRIPTION_HERE",
  "datePosted": "2026-10-01",
  "validThrough": "2026-11-30T23:59:59",
  "employmentType": "FULL_TIME",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "YOUR_COMPANY_NAME_HERE",
 "sameAs": "YOUR_COMPANY_WEBSITE_HERE"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "YOUR_STREET_ADDRESS_HERE",
      "addressLocality": "YOUR_CITY_HERE",
      "addressRegion": "YOUR_STATE_HERE",
      "addressCountry": "US"
    }
  },
  "baseSalary": {
    "@type": "MonetaryAmount",
    "currency": "USD",
    "value": {
      "@type": "QuantitativeValue",
      "minValue": 60000, "maxValue": 85000,
      "unitText": "YEAR"
    }
  }
}
</script>
Combine types: one page can carry several blocks (e.g. Organization + WebSite + BreadcrumbList on every page, Article only on posts). Give each entity a stable @id and reference shared entities via "publisher": { "@id": "…#organization" } instead of duplicating them.