Improve SEO with structured data

It is the same goal for every business online: improve rankings without tripping over a Google penalty. And the goal posts keep moving, so you never quite know whether you are safe or about to get nailed.

One thing that has stayed steady through all of it is structured data. It is still one of the most useful things you can add to a website, and still one of the least used.

Updated for 2026

What has changed is which structured data is worth your time. Google has retired several rich results since we first wrote this article, and some advice that was correct in 2019 will now get you nowhere, or worse. This is the current version.

What is structured data?

Schema.org structured data is a shared vocabulary for describing things on the web. It lets you tell a search engine what your content means, not just what it says.

In practice it is a small block of code added to a page so crawlers understand the content. On a product page: what the price is, whether it is in stock, how many reviews it has. On a business page: the address, the opening hours, the phone number.

Without it, a search engine sees the number "312-771-9111" and has to guess. With it, the search engine knows that is a telephone number belonging to a business.

What changed since 2019

This is the part most articles on this subject have not caught up with. Several rich results have been retired.

Feature Status What it means
FAQ rich results Deprecated May 2026 FAQ dropdowns no longer appear in search results
HowTo rich results Removed 2023 Step-by-step rich results are gone
Self-serving reviews Restricted Sept 2019 Reviews you write about yourself no longer produce stars
Sitelinks searchbox Deprecated 2024 The search box under your listing is gone

Worth being clear about what deprecation means here: the schema types themselves are still valid. FAQPage and HowTo are legitimate Schema.org vocabulary, they will not throw errors, and you do not need to strip them out. They simply no longer earn you anything in Google Search.

The self-serving review rule is the one to pay attention to

Check your site for this one

In September 2019, Google stopped showing review stars for reviews a business publishes about itself. If you add AggregateRating or Review markup to your own LocalBusiness or Organization page using reviews you control, you will not get stars, and you risk a manual action for spammy structured data.

Review markup still works, but for things you are not: a product you sell, a book, a recipe, a course. Reviews of your own business belong on your Google Business Profile, which is where Google gets them from now.

What still earns rich results

Type Good for
Article Blog posts and news, headline and image in results
Product Price, availability, and star ratings for what you sell
LocalBusiness Address, hours, and phone for a physical business
BreadcrumbList Readable navigation path instead of a raw URL
Event Dates and venues, and listings in Google Events
Video Thumbnails, key moments, and Video tab inclusion
Organization Knowledge panel details and logo
JobPosting, Recipe, Course Still supported in their own verticals
If you only do one thing

For most small business websites, the useful set is short: Organization or LocalBusiness, BreadcrumbList, and Article on your blog posts. If you sell things, add Product. That covers almost all of the available benefit.

The three formats

There are three ways to add structured data to a page: Microdata, RDFa, and JSON-LD.

JSON-LD, and why it is the one to use

JSON-LD is what Google recommends, and it is what you should use. It sits in a <script> tag, separate from your visible HTML, so it is far easier to add, read, and change without breaking your layout.

The rule that matters: the structured data must match what a visitor can actually see on the page. Marking up a price of $10 while the page says $40 is a policy violation, not a clever trick.

Microdata

Microdata wraps attributes around your existing HTML using name-value pairs:

<span itemprop="telephone">(312) 771-9111</span>

It works, but every change means touching your markup, and it is easy to break when a template changes.

RDFa

RDFa is a W3C specification that does much the same job with slightly different syntax:

<span property="telephone">(312) 771-9111</span>

Both are still valid. Neither is worth choosing for a new project.

Structured data and AI answers

This is the part that did not exist when we first wrote this.

Search results increasingly include AI-generated answers assembled from pages the system can read and trust. Structured data does not guarantee you will be cited, and nobody selling you "AI SEO" can promise that either.

What it does is make your content unambiguous. A page that clearly states it is an Article, by a named organisation, published on a date, about a specific topic, is easier for any machine to summarise correctly than one that leaves all of that to be inferred. Being the source that gets quoted accurately is worth something, even when the click does not follow.

How to add structured data to your website

  1. Follow Google's guidelines. Read the structured data policies first. The rules about matching visible content are the ones people break.
  2. Write it in JSON-LD. Use the examples below as a starting point.
  3. Validate it. Use the Rich Results Test to check whether Google can produce a rich result, and the Schema Markup Validator to check the syntax itself. The old Structured Data Testing Tool was retired years ago.
  4. Add it to the page. JSON-LD goes in the head or the body, either is fine.
  5. Check Search Console. The Enhancements reports show what Google actually picked up, which is not always what you think you added.

Structured data examples

LocalBusiness, the right way

LocalBusiness is the most useful schema for a business with a physical presence. Note what is not here: no self-authored reviews, no aggregateRating.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "@id": "https://www.example.com/#business",
  "name": "Westfield Landscape Co",
  "url": "https://www.example.com/",
  "logo": "https://www.example.com/logo.jpg",
  "image": "https://www.example.com/storefront.jpg",
  "telephone": "+1-630-948-5062",
  "email": "info@example.com",
  "priceRange": "$$ - $$$",
  "description": "Locally owned lawn, landscaping, snow and irrigation company serving the west suburbs of Chicago.",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1250 Rural St",
    "addressLocality": "Aurora",
    "addressRegion": "IL",
    "postalCode": "60505",
    "addressCountry": "US"
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
    "opens": "08:00",
    "closes": "17:00"
  }],
  "areaServed": ["Aurora","Naperville","Plainfield"]
}
</script>

Note https://schema.org in the context. The old http:// form still works but the secure version is now standard.

Product with price, availability and rating

This is where review stars are still legitimate, because you are marking up a product rather than yourself. Shopify, WooCommerce, and BigCommerce generate most of this automatically.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Cordless Hedge Trimmer 40V",
  "image": "https://www.example.com/trimmer.jpg",
  "description": "Lightweight 40V cordless hedge trimmer with a 24 inch blade.",
  "sku": "HT-40V-24",
  "brand": { "@type": "Brand", "name": "GreenEdge" },
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.com/hedge-trimmer",
    "priceCurrency": "USD",
    "price": "189.00",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.6",
    "reviewCount": "128"
  }
}
</script>

Article, for blog posts

The one most business blogs skip, and the easiest win on a content site.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to Improve SEO With Structured Data",
  "image": "https://www.example.com/article-image.jpg",
  "datePublished": "2019-06-13T01:57:04+00:00",
  "dateModified": "2026-09-12T00:00:00+00:00",
  "author": { "@type": "Organization", "name": "Inova Creative Agency" },
  "publisher": {
    "@type": "Organization",
    "name": "Inova Creative Agency",
    "logo": { "@type": "ImageObject", "url": "https://www.example.com/logo.jpg" }
  }
}
</script>

dateModified is worth keeping accurate. It is how Google knows a page has been refreshed rather than left to rot.

Breadcrumbs

Cheap to add, and it replaces the raw URL in your search listing with a readable path.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home",
      "item": "https://www.example.com/" },
    { "@type": "ListItem", "position": 2, "name": "Services",
      "item": "https://www.example.com/services/" },
    { "@type": "ListItem", "position": 3, "name": "Web Design" }
  ]
}
</script>

Event

Event markup still earns rich results and gets listings into Google's events section, which is a genuine source of discovery for anyone running classes, gigs, or in-store days.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Event",
  "name": "Spring Landscaping Workshop",
  "image": "https://www.example.com/workshop.jpg",
  "description": "A two hour hands-on workshop covering spring lawn preparation.",
  "startDate": "2026-04-18T13:00-05:00",
  "endDate": "2026-04-18T15:00-05:00",
  "eventStatus": "https://schema.org/EventScheduled",
  "eventAttendanceMode": "https://schema.org/OfflineEventAttendanceMode",
  "location": {
    "@type": "Place",
    "name": "Westfield Garden Center",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "1250 Rural St",
      "addressLocality": "Aurora",
      "addressRegion": "IL",
      "postalCode": "60505",
      "addressCountry": "US"
    }
  },
  "organizer": { "@type": "Organization", "name": "Westfield Landscape Co",
                 "url": "https://www.example.com/" },
  "offers": {
    "@type": "Offer",
    "price": "40.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "url": "https://www.example.com/events/",
    "validFrom": "2026-03-01T00:00-06:00"
  }
}
</script>

eventStatus and eventAttendanceMode were added after the pandemic and are now expected. Leave them out and you may not get the rich result.

Tips that still hold

1. Use the types that match your business

Pick the schema that genuinely describes what the page is. A services page is not a Product. Accuracy matters more than volume.

2. More markup is not automatically better

This is where the old advice has aged worst. Adding every schema you can think of does not compound your rankings. Google only renders rich results for supported types, and marking up things that are not really there is a policy violation.

Three correct schemas beat twelve speculative ones.

3. Keep it in sync with the page

Structured data that contradicts the visible content is the most common reason for a manual action. If the price changes, the markup changes.

4. Let your platform do the work where it can

WordPress SEO plugins, Shopify, and WooCommerce already output a good deal of this. Check what you have before writing anything by hand, because duplicate or conflicting markup causes more problems than missing markup does.

Is structured data still worth it?

Yes, with a more realistic expectation than the one people had in 2019. It is not a ranking hack and never was. Google has never said it boosts rankings directly.

What it does is make your pages unmistakable to a machine, which means better listings, more useful results, and a better chance of being understood correctly by whatever is assembling the answer. That was true before AI answers existed and it is more true now.

In Conclusion

SEO works best when you make it easy for search engines to understand what is on your pages. Plain HTML does a reasonable job. Structured data does it properly.

Start with the short list: Organization or LocalBusiness, BreadcrumbList, and Article. Validate it, keep it honest, and leave the retired types alone.

If you want us to look at what your site is currently telling Google, get in touch and we will check it for you.