PortfolioElementor technical SEO
How-to

Schema markup in Elementor: how to add it without breaking it

Elementor emits no structured data whatsoever. Not Article, not Service, not Organization, nothing. It renders divs, and divs tell a search engine nothing about what a page is.

That is not a criticism. Layout is Elementor's job and schema is not. But it means structured data on an Elementor site is entirely your responsibility, and the way most people add it creates a second problem on top of the first.

The mistake almost everyone makes

Someone reads that schema helps, installs Yoast or Rank Math, and then also drops an HTML widget containing hand-written Organization markup onto the homepage.

The page now declares itself twice. Two Organization blocks with slightly different names, two different logo URLs, one with a phone number and one without. Search engines do not average them. They pick, or they discount both, and you have made the entity less clear than it was when you had nothing.

Decide which layer owns each type before you add anything. In practice that means the SEO plugin owns everything it covers, and hand-written markup only fills genuine gaps.

What the SEO plugin should own

Yoast and Rank Math both build a connected graph from your WordPress data, regardless of how the page was visually built. Leave these to the plugin:

  • Organization or LocalBusiness on the site as a whole, configured once in the plugin settings.
  • WebPage and WebSite, which the plugin generates per page automatically.
  • BreadcrumbList, provided you are using the plugin's breadcrumb function rather than an Elementor breadcrumb widget. If you use the widget, the visible trail and the marked-up trail come from different sources and will eventually disagree.
  • Article and Person for posts, drawn from the post's author and dates.

The advantage is not convenience. It is that the plugin keeps the graph internally consistent and updates it when the page changes, which hand-written markup never does.

What genuinely needs a manual block

Where plugins stop is page-specific types tied to content the plugin cannot infer:

  • Service on a service page, naming the service, the provider and the area served.
  • FAQPage where you have a real question-and-answer block on the page.
  • HowTo for a genuine step sequence.
  • Product or Offer where pricing is published.

Add these with an HTML widget placed once per page, or better, through your theme so the block lands in the head. Reference the plugin's existing entities by their identifier rather than redeclaring them, so the Service points at the Organization the plugin already defined instead of inventing a second one.

Why your markup validates but does not appear

This is the Elementor-specific failure, and it catches people who have done everything else right.

Markup added through an Elementor HTML widget lands in the body, and depending on how the page is built it can be injected after the initial document by JavaScript. Google's Rich Results Test then reports nothing, even though the block is plainly visible in your browser's element inspector.

The inspector shows the rendered DOM. The first crawl sees the response. Those are different documents, and structured data that exists only in the former is discovered late and trusted less.

Check with view-source, not the inspector. If the JSON block is absent from the raw response, move it into the head through the SEO plugin's custom-code field or the theme's header hook.

The same distinction decides whether AI answer engines can read your page at all, which I cover in how AI reads your page.

Template inheritance will duplicate your schema

Elementor's Theme Builder applies headers, footers and single-page templates across many pages at once. Put an HTML widget containing schema into a template and every page using that template now carries it.

For Organization that is harmless duplication of something already declared. For anything page-specific it is actively wrong: a Service block in a template tells search engines that forty unrelated pages all describe the same service.

Page-specific markup belongs on the page. Only sitewide entities belong in a template, and those are already handled by the plugin, which is the point.

What to expect from it

Schema does not raise rankings directly. It makes a page machine-readable, which affects whether you are eligible for rich results, how confidently search engines associate your pages with an entity, and increasingly whether AI answer engines can cite you accurately.

Google has also narrowed FAQ and How-To rich results substantially. Marking them up is still worth doing for entity clarity and AI retrieval. Expecting a visual rich result from them is out of date.

Structured data is the half of this I specialise in — the full picture is on schema markup, and the surrounding Elementor work is in Elementor technical SEO.

Working with me

If your structured data validates but nothing has changed, the problem is usually placement or duplication rather than the markup itself. A website audit checks what search engines actually receive, which is frequently not what you think you published.

Frequently asked questions

Does Elementor add schema markup automatically?

No. Elementor outputs layout markup and nothing else. It does not know whether your page is a service, an article or a person, and it will not tell search engines. A handful of Elementor Pro widgets emit their own structured data when used, but there is no page-level schema unless you or a plugin adds it.

Should I use an SEO plugin or the HTML widget for schema?

Use the SEO plugin for everything it covers, which is usually Organization, WebPage, Article and BreadcrumbList. Use an HTML widget only for page-specific types the plugin does not handle. Doing both for the same type is the most common mistake and it produces two competing descriptions of one page.

Why does the Rich Results Test miss schema I can see on the page?

Usually because the markup is injected by JavaScript after the initial HTML document. Check the rendered DOM in browser developer tools rather than view-source. If the block only appears after rendering, move it into the head through your SEO plugin or the theme, so it is present in the response Google parses first.

Do FAQ and How-To widgets still produce rich results?

They still emit valid structured data, but Google has substantially narrowed which sites see FAQ and How-To rich results in search. Treat them as a way to make your content machine readable for AI answer engines and for entity understanding, rather than as a reliable route to a visual rich result.

Schema validating but nothing changing?Book a 30-minute call →