See the structured data on your page, and whether it is machine-readable at all.
Free · no signup · reviewed
Free, no signup. We fetch the page live and read what a search engine would see.
Structured data is how you tell a search engine what a page is rather than leaving it to guess: a product with a price and stock, an article with an author and a date, a business with opening hours. It is what makes rich results possible — the stars, the prices, the FAQ accordions that take up more of the screen than a plain listing.
This reads every JSON-LD block on the page, reports the types declared, and — the part that matters — tells you which blocks fail to parse. A single trailing comma disables an entire block silently, and nothing on the page looks any different.
It also looks for microdata and RDFa, which are read differently and are usually left over from an older theme, and for the two blocks almost every site should have and most don't: Organization and BreadcrumbList.
Rich results take more of the screen than a plain listing, and the space above your competitor is worth more than a position. Structured data is also increasingly how AI answers decide what a page says and whether to cite it — a page a machine can read is a page it can quote, and that is becoming a traffic source of its own.
Organization and WebSite on the homepage, BreadcrumbList on every deep page, and the type that matches each page: Product with offers and availability, Article with author and dates, LocalBusiness with address and hours, FAQPage where a real FAQ is visible on the page.
Each of these has a full entry in our issue library: what it is, what it costs a business, and step-by-step fixes for WordPress, Shopify, Webflow and custom builds.
No machine-readable description of the business or page.
A checker that hands you a list and walks away has done half the job. Here is what each kind of finding means and what it is worth doing about it.
Search engines discard the whole block, not the broken property. The usual culprits are a trailing comma, an unescaped quote inside a description, or a template variable that rendered as nothing. Fix these first — the markup is already written, it just isn't working.
If a product page declares only Organization and WebSite, no rich result is possible no matter how good the page is. Match the type to the page's job before adding anything else.
A Product block missing price or availability parses perfectly and earns no rich result. Google's Rich Results Test is the place to check eligibility; this is the place to check the markup exists and is readable at all.
Both are read, and having two sources of truth is how a page ends up claiming two different prices. Pick JSON-LD, remove the inline attributes, and re-check.
FAQ markup for questions nobody can see, reviews that appear nowhere, a price that differs from the one displayed. It is a guidelines violation, the rich result gets withdrawn, and in the meantime it damages trust with the people who do click.
Star ratings you wrote about yourself on your own site are explicitly not eligible for rich results. Reviews have to come from customers and be visible on the page.
More markup is not better markup. One accurate type per page, plus Organization and breadcrumbs, beats a stack of half-filled blocks that contradict each other.
Most SEO plugins emit a reasonable Organization block and stop there. Product, Article and LocalBusiness details usually need mapping to real fields, which is the step people skip.
The setting is in a different place on every platform, and that is usually what stands between knowing and fixing.
Yoast and Rank Math both build a schema graph automatically, and both let you set the type per post type. Problems usually come from a second plugin or a theme adding its own block — two Organization blocks with different logos is a common find.
Most themes emit Product markup, and most emit it incompletely — missing availability, or a price that doesn't update with the variant. Check a product page with a variant selected, which is where the mismatch shows.
No structured data by default. Add a JSON-LD block in page settings or in an embed, binding the values to CMS fields rather than typing them, so every collection item gets its own rather than the template's.
Blog posts, products and events get basic markup automatically. Anything beyond that — LocalBusiness with hours, FAQPage — goes in code injection, per page where it belongs.
Render a JSON-LD script tag from real data on the server rather than assembling it in the browser. Build it from the same object the page renders from, and the markup can never disagree with what the visitor sees.
More on your platform: SEO audits by platform.
Every tag in the head of your page, read back to you the way a crawler sees it.
Score one page against the checks that actually move rankings.
Every image on the page, and what a screen reader would say about it.
Or see all ten free tools.