Closing Schema Gaps Against Your Competitors
A schema gap means a competitor has structured data on their pages that you do not: a Product block with price and stock, a LocalBusiness block with opening hours, breadcrumbs, review markup or video details. Sometimes that difference is why their listing shows extra information and yours does not.
Just as often, the extra markup does nothing visible at all, or breaks Google's guidelines. This guide shows you how to compare markup on matching pages, sort the differences into ones that affect how you appear and ones that do not, avoid copying mistakes, and add the markup that is worth having.
Why schema gaps matter, and why many do not
Structured data is code, usually JSON-LD, that describes what a page is about in a form search engines can read without guessing. The Competitor Analysis compares the structured data types and properties each site uses, so you can see where a rival has markup you lack.
That difference only matters in three situations:
- It makes a page eligible for a rich result that is currently shown, such as product price and availability, review stars on a product, breadcrumbs in place of the address, or event dates.
- It clarifies who you are, for example Organization or LocalBusiness details that help search engines and AI systems connect your site to your business name, address and profiles elsewhere.
- It describes something on the page that is otherwise hard to parse, such as a video's key moments or a recipe's ingredients.
Many differences fall outside all three. A rival might use a dozen extra properties that Google does not use for any feature, or a type Google no longer shows. Copying them costs time and changes nothing. Structured data also does not work as a general ranking boost; Google describes it as a way to understand the page and to make it eligible for certain displays.
Comparing like with like
Site-wide counts of schema types are misleading. A rival's blog might use Article markup on 300 posts while their service pages have none. Compare pages that compete with each other for the same searches.
| Your page | Rival page to compare | Markup worth checking |
|---|---|---|
| Homepage | Their homepage | Organization or LocalBusiness, WebSite |
| Service or location page | Their equivalent page ranking for the same local search | LocalBusiness (or a subtype such as Plumber or Dentist), BreadcrumbList |
| Product page | Their page for the same or a similar product | Product with Offer, shipping and returns, AggregateRating |
| Guide or article | Their article ranking for the same question | Article, author details, BreadcrumbList, VideoObject if there is a video |
| Event or course listing | Their listing | Event with dates, location and offers |
How to see a competitor's markup
- Rich Results Test (search.google.com/test/rich-results): enter the rival's address. It shows which Google features the page is eligible for and any errors.
- Schema Markup Validator (validator.schema.org): shows every schema.org type and property, including ones Google ignores.
- View source: search for
application/ld+json. Markup injected by JavaScript will not appear in the raw source, but both testing tools render the page and will find it.
Use both testers. The first tells you what Google does with the markup; the second tells you everything that is there.
Which differences change what searchers see
Google's search gallery documentation lists the structured data features it currently supports, and the list changes. Features have been retired over the years, including HowTo rich results in 2023, and in 2025 Google announced it was phasing out several less-used features. Check the current gallery before investing in a type.
| Rival has | Typical visible effect | Priority for you |
|---|---|---|
| Product with Offer (price, availability) | Price and stock in results; merchant listing eligibility | High for shops |
| AggregateRating on products | Star ratings under the listing | High, if you have genuine on-site reviews |
| BreadcrumbList | A readable path in place of the address on some results | Medium; quick to add |
| Organization or LocalBusiness | Helps with business details and entity understanding; no guaranteed display | Medium; one-off job |
| Event | Event dates and venue in results | High for event pages |
| VideoObject | Video thumbnails and key moments | Medium where the page has its own video |
| Recipe | Image, rating and cooking time in results | High for recipe sites |
| FAQPage | Rich result limited to well-known government and health sites | Low for most businesses |
| HowTo | No rich result since 2023 | None for search display |
| Review stars on their own LocalBusiness or Organization | Not shown: Google treats these as self-serving reviews | None; do not copy |
Types with no visible effect in Google can still help other systems understand your page, so there is no harm in accurate markup. They just belong at the bottom of the list.
Markup you should not copy
A competitor having markup does not make that markup correct. Common problems in rivals' structured data:
- Self-serving review stars. Review markup about the business itself, added to its own LocalBusiness or Organization block, is not eligible for star ratings.
- Markup for content that is not on the page. Ratings, prices or FAQs that appear only in the code break Google's structured data guidelines and can lead to a manual action.
- Invented or inflated ratings. Ratings copied from another platform, or hard-coded numbers that never change.
- The wrong type. Product markup on a service, or Article markup on a product listing.
- Duplicated or conflicting blocks from a theme and a plugin both adding their own version.
If the Rich Results Test shows errors or warnings on the rival's page, their markup may be doing them no good at all. The gap you see might not be a gap.
An example: closing a LocalBusiness gap
A fictional firm, Brookside Heating, finds that two rivals ranking for "boiler repair chesterfield" both have LocalBusiness markup with hours and service area, and breadcrumbs on their service pages. Brookside has nothing. Both differences are worth closing. Here is a block for its homepage, using real details from its contact page:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://www.example.co.uk/#business",
"name": "Brookside Heating",
"url": "https://www.example.co.uk/",
"logo": "https://www.example.co.uk/images/logo.png",
"image": "https://www.example.co.uk/images/van.jpg",
"telephone": "+44 1246 000000",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 Example Road",
"addressLocality": "Chesterfield",
"postalCode": "S40 1AA",
"addressCountry": "GB"
},
"areaServed": ["Chesterfield", "Dronfield", "Bolsover"],
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:30"
}],
"sameAs": ["https://www.facebook.com/example-brookside-heating"]
}
</script>
Plumber is a schema.org subtype of LocalBusiness; choose the most specific type that
fits your business. Every value must match what the page and your Google Business Profile say. For which
type to choose when none fits exactly, see choosing
the right schema type.
Where to add it
WordPress: most SEO plugins have a local business or organisation setting; fill that
in rather than pasting a second block, or you will create duplicates. Shopify: many
themes output Organization and Product markup already; check before adding an app, and switch off overlapping
output. Custom and static sites: add the block to the page template's <head>
and generate values from the same data the page displays.
The fix, step by step
Step 1
Pair your pages with the rival pages they compete with
For each important search in your Competitor Analysis, note the rival page that ranks and your page that should compete with it: homepage with homepage, service page with service page, product with product. Comparing matching pairs rather than whole sites stops you copying markup from parts of a rival's site that have nothing to do with your competing pages, such as Article markup on hundreds of blog posts.
Step 2
Extract the structured data from both sides
Run each rival page and your matching page through the Rich Results Test to see which Google features each is eligible for, then through the Schema Markup Validator to see every type and property present. Both tools render JavaScript, so they find markup that does not appear in the raw source. Save or screenshot the results so you have a record of what each page carried on the day you checked.
Step 3
List the differences in a comparison grid
In a spreadsheet, put one row per page pair and columns for each schema type and important property: Product, Offer, price, availability, AggregateRating, LocalBusiness, opening hours, BreadcrumbList, VideoObject and so on. Mark which side has each one. Note errors and warnings from the Rich Results Test too, because a rival carrying broken markup is not ahead of you, whatever the raw count of types suggests.
Step 4
Keep only differences that change what searchers see
Check each difference against the features in Google's current search gallery documentation. Keep types that make a page eligible for a displayed rich result or clarify your business details, such as Product with offers, product ratings, breadcrumbs, Event, Recipe and LocalBusiness. Move FAQPage, HowTo and properties Google does not use to the bottom of the list. The result is usually a short list of genuinely useful additions rather than dozens of properties.
Step 5
Check the rival's markup is valid and allowed
Before copying any pattern, confirm that it follows Google's structured data guidelines. Reject review stars on a business's own LocalBusiness or Organization block, ratings or prices that do not appear on the visible page, invented figures and markup of the wrong type. If the rival page shows errors in the Rich Results Test, their markup may be earning them nothing, and matching it would only add the same risk to your own pages.
Step 6
Add the markup using your own real data
Write JSON-LD for each type on your list, using values that match what your page shows: your real prices, stock, hours, address and reviews collected on your own site. Generate the values from the same data the page uses so they stay in step. On WordPress or Shopify, use the plugin, theme or app setting where one exists, and switch off any other source of the same type so you do not end up with duplicate blocks.
Step 7
Validate, then measure the search appearance
Test each updated page in the Rich Results Test until it shows no errors, then request indexing with URL Inspection in Search Console. Watch the enhancement reports, such as Product snippets, Merchant listings and Breadcrumbs, as pages are recrawled. After a few weeks, use the Search appearance filter in the Performance report to compare impressions and click-through rate for the rich result against the period before the change.
Measuring the effect
Schema gaps are among the quickest to close, but measuring them needs care because rich results come and go by query and by day.
- Search appearance filter. In Search Console's Performance report, the Search appearance dimension shows impressions and clicks for results that displayed a particular feature, such as Product snippets or Review snippets.
- Click-through rate on the paired pages. Compare a few weeks before and after, for the same queries, and allow for seasonal changes.
- Enhancement reports. A rising count of valid items confirms Google has read the new markup across your templates.
- A re-run of the comparison. Run the Competitor Analysis again with the same rivals to confirm the schema difference is closed and to see if they have added anything since.
1. Will adding the same schema as my competitor help me rank higher?
Not directly. Google describes structured data as a way to understand a page and to make it eligible for certain rich results, not as a general ranking boost. Where the rival's markup earns them a visible feature, such as price and stock or product ratings, matching it can make your listing more informative and may improve click-through. Where it earns nothing visible, adding it will not change your position, so it belongs lower on your list.
2. How can I see what structured data a competitor uses?
Enter their page address in Google's Rich Results Test to see which Google features the page is eligible for, then in the Schema Markup Validator to see every schema.org type and property on the page. Both tools render JavaScript, so they catch markup added by scripts that would not appear in the page source. Compare pages that compete with each other, such as your service page against theirs, rather than whole sites.
3. My competitor shows review stars on their homepage. Why can I not do the same?
Google does not show review stars for reviews a business collects about itself and marks up on its own LocalBusiness or Organization pages. It calls these self-serving reviews. If a rival's stars appear to come from such markup, they may be showing from a different source, or the markup may not be producing stars at all. Review stars remain available for things like products and recipes when the reviews are genuine and shown on the page.
4. Is it worth adding FAQ or HowTo schema because rivals have it?
For search display, usually not. Google stopped showing HowTo rich results in 2023, and FAQ rich results are limited to well-known, authoritative government and health websites. Accurate markup does no harm and can still help other systems read the page, but it will not earn most businesses any visible feature in Google. Put the time into markup that does produce a visible result, such as Product, BreadcrumbList or Event, where it applies.
5. Can I copy a competitor's JSON-LD and change the details?
You can use its structure as a starting point, but check every type and property against your own page and Google's guidelines before publishing. Rivals' markup often contains errors, duplicated blocks, the wrong type or values that do not appear on the page. Every value in your version must match what your page actually shows. It is usually safer to build from a clean example of the type you need and fill in your own real data.
6. How long does it take for a rich result to appear after I add schema?
Google has to recrawl and reprocess the page before the markup can be used, which usually takes from a few days to a few weeks depending on how often your site is crawled. Requesting indexing with URL Inspection can speed up individual pages. Even then, the rich result may appear for some searches and not others, because Google decides for each query whether to show it. Measure over several weeks rather than day to day.
7. Does schema help with AI search as well as Google?
Clear, accurate structured data can help AI systems and search engines understand who you are, what you sell and how pages relate, particularly Organization, LocalBusiness and Product details. It is not a guaranteed route to being cited in AI answers, which depend heavily on the content itself and what other sites say about you. Treat it as one supporting signal, kept accurate and consistent with your visible pages and your business profiles elsewhere.
Our Competitor Analysis compares your site with named rivals across keywords, content, backlinks, technical health, schema and AI visibility, including the structured data types and properties each site uses, so you can see which gaps are worth closing.
Open Competitor Analysis Fixes โ