Skip to article
On this page

Schema.org structured data (JSON-LD) explained

NyXi

NyXi

7 min read

Structured data describes your page to search engines in a format they can read exactly. It sends nothing to any tracking account, it has no ID.

If Tag Explorer returned a card reading something like Schema.org Structured Data (Product), it found SEO markup rather than a tracking tag. That distinction is the whole point of this guide: structured data is the one thing in a typical scan that collects nothing, reports to nobody, and exists purely to help search engines understand your page. Paste your page into Tag Explorer to see this tag on your own site.

Structured data is machine readable text embedded in the page that describes what the page is about. On any modern site it is written as JSON-LD: a small block of data inside a script element of type application/ld+json, following the shared vocabulary published at schema.org.

What it actually does

A search engine reading your page sees headings, paragraphs and images and has to infer the rest. Structured data removes the inference. Instead of hoping a crawler works out that the number near the top of the page is a price, you state it: this is a Product, its name is this, its price is this, it is in stock.

That gives search engines facts they can rely on, and reliable facts are what rich results are built from. A rich result is a search listing with extra detail attached: breadcrumbs above the link, a star rating, a price, expandable questions, opening hours for a business, an author and date on an article. The markup does not create the rating or the price. It labels what is already on the page so it can be shown in the listing.

The same markup increasingly feeds systems beyond the classic blue links, including the AI summaries and assistants that answer questions by reading pages. Clear, correct facts about your business are useful to all of them.

Why it has no ID

Every other card in a tag scan has an account behind it. A measurement ID names an analytics property, a pixel ID names an advertising account, a container ID names a Tag Manager container. Structured data has none of that, because there is no account to belong to. Nothing is sent, so there is nothing to address.

What takes the place of an ID is the @type. Every block declares one, and it is the single most informative thing about the markup:

  • Organization and LocalBusiness describe the business itself: name, contact details, opening hours, social profiles.
  • Product and Offer describe an item and its price and availability.
  • Article, BlogPosting and NewsArticle describe a piece of writing, its author and its dates.
  • FAQPage describes questions and their answers.
  • BreadcrumbList describes where the page sits in your site structure.
  • Review and AggregateRating describe ratings, and they are the ones to be most careful with.

The type decides which properties make sense and which rich result the page can qualify for. Google publishes the required and recommended properties for each supported result in its structured data documentation.

Why it sometimes lives in Tag Manager

Structured data belongs in your page templates, generated from the same data the page displays. That way it is present in the HTML the server sends, it stays in step with the visible content, and it is version controlled with the rest of the site.

Plugins and developers sometimes inject it through a Custom HTML tag in Tag Manager instead. It works, and it is a reasonable stopgap when nobody can edit the templates, but it is worse in three ways.

Markup added by JavaScript after the page loads depends on the crawler rendering the page before it sees anything, which is less reliable than markup that was there from the first byte. It puts a search asset inside a marketing tool, where an unrelated container change can remove it without anyone noticing. And it separates the markup from the content it describes, so the two drift: the page changes, the injected data does not.

If a scan shows your structured data arriving through a container, treat it as a job to move rather than an emergency.

How to validate it

Two tools answer two different questions. Google’s Rich Results Test tells you whether a page qualifies for a specific rich result and which errors block it. The Schema Markup Validator at schema.org checks the markup itself against the vocabulary, including types Google does not use. Run both on a page you care about, then let Search Console report the same issues across the whole site over time.

The fault to watch for is duplication: two conflicting Product blocks on one page, or an Organization emitted by both the theme and a plugin with different details in each. Search engines are left to choose, and you will not like the choice. Our SEO Analyzer checks the markup alongside the rest of a page’s search structure if you would rather see it all in one report.

What this looks like in Tag Explorer

Tag Explorer draws your page as a tree. Each Tag Manager container is a branch, the tags inside it are leaves underneath, and anything hard coded into the page HTML sits under DIRECT ON PAGE.

Structured data appears as an SEO / structured data card, and because there is no ID to print, the card is titled with the type it found, for example Schema.org Structured Data (Product). There is no copy button, which is normal for anything without a public ID. The info icon opens a short definition and the Learn more link that brought you here.

Where the card sits is the useful signal. Under DIRECT ON PAGE means the markup is in the page itself, which is what you want. Under a container means it is being injected by a tag, which is the case discussed above. Several structured data cards on one page is often fine, since a page can legitimately declare a business, a breadcrumb trail and an article at once, but two cards of the same type deserve a look.

The usual limits apply. The scan reads the published container only, and it proves markup is present, not that a search engine accepted it. Validation is what proves that, which is why the two validators above are the next step rather than the last word from any scan.

What to do if it is missing, duplicated or dead

Missing. No structured data card means search engines are inferring everything about your pages. Start with the basics that apply to every site: an Organization or LocalBusiness block sitewide and a BreadcrumbList on internal pages. Then add the type that matches what each page actually is, such as Product on product pages and Article on posts. Generate it from the page’s own content rather than hand writing it per page.

Duplicated. Two blocks of the same type with different details is worse than one, because you are telling search engines two versions of the same fact. This usually happens when a theme and an SEO plugin both emit markup, or when a plugin and a container tag do. Find both sources, keep the one closest to your content, and switch the other off.

Dead or stale. Structured data does not expire, but it does go wrong quietly. Prices that changed, opening hours that moved, a product marked in stock that is not, an author who left: the visible page gets updated and the markup does not. Markup that contradicts the visible page is worse than no markup at all, so if yours is hand written per page, that is the reason to move it into the template and generate it.

To see whether your pages carry structured data and where it comes from, run one through Tag Explorer, then put the same page through the SEO Analyzer. If the answer is that search engines and AI assistants are guessing at what your business does, that is exactly what our AI content and SEO structure work sets straight.

Frequently asked questions

Does structured data send my data anywhere?

No. A JSON-LD block is text sitting in your page describing what the page is about. It contacts no server, sets no cookie and belongs to no account, which is why it has no tracking ID. Search engines read it when they crawl the page, and nothing else happens.

Will structured data make me rank higher?

It is not a ranking factor in itself. What it does is make your result eligible for richer presentation in search listings, such as breadcrumbs, ratings, prices or FAQ lines, and a result that takes up more space and answers more of the question tends to earn more clicks. Treat it as improving how your result looks, not where it sits.

What does @type mean?

@type declares what kind of thing the block describes, taken from the shared schema.org vocabulary. Common values are Organization, LocalBusiness, Product, Article, FAQPage, BreadcrumbList and Review. The type decides which other properties make sense and which rich result the markup can qualify for.

Is it bad to add structured data through Google Tag Manager?

It works, but it is second best. Markup injected by JavaScript after the page loads is read less reliably than markup present in the HTML the server sent, and it puts an SEO asset inside a container marketing staff can change. Where you control the site templates, put it in the template.

How do I check my structured data is valid?

Use Google's Rich Results Test to see whether a page qualifies for a rich result and which errors block it, and the Schema Markup Validator at schema.org for a general check of the markup itself. Search Console then reports the same issues across your whole site over time.

More articles