Common fight

Two graphs. Same type. Different @id.

A JSON-LD collision is two emitters on one public page describing the same @type with different identifiers. The names can match. The ids do not.

What we mean by collision

Yoast prints https://example.com/#organization. Rank Math prints something like /#schema/Organization. A theme can add a third node with no @id at all. To a consumer those are separate entities, even when the visible name is the same.

Valid is not the same as alone

Google’s Rich Results Test validates one block. It does not tell you that WooCommerce and an SEO plugin both emitted Product, or that two plugins both claimed Organization. GraphClash flattens every application/ld+json graph and lists the competing ids.

Pick one emitter per type

That is the fix. Disable the extra Organization, Product, or WebSite in the plugin or theme you are not using as the source of truth. We do not log into WordPress. We do not generate a replacement graph.

Check a page

Free, no account. Results stay in this browser session.

Free. No account. We do not store scans.

FAQ

Is a collision a Google penalty?
Usually not. Overlapping JSON-LD is not a ranking penalty in the way people mean that word. Conflicting entities can still weaken rich-result eligibility because the consumer has to pick a story.
What types do you watch?
Organization, WebSite, WebPage, Article, Product, FAQPage, and BreadcrumbList. We also flag two Organizations with different names or logos.
How is this different from Rich Results Test?
Google’s test asks whether a block is valid. We ask whether two emitters are fighting on the same page. A page can pass the test and still carry two Organization nodes.
How do people usually turn a type off?
In the plugin you are not using as the source of truth — or with the public filters wpseo_json_ld_output (Yoast) and rank_math/json_ld (Rank Math). GraphClash only detects. It does not ship a functions.php patch or change settings.

Back to the checker