Nested Markup and the "Three Hops" Heuristic

Modified on Fri, 29 Nov at 3:04 PM

This support article explains a possible reason why you might only be seeing an @id for a property where you would expect to see a whole data item. You might be seeing this when you select "View JSON-LD" in the Schema App Editor. You might also be seeing this on live URLS you test with the Rich Results Test or in your GSC Enhancement Report.

Schema App's tools create schema markup in a JSON-LD format. The JSON-LD on your website is deployed to individual pages but it also exists in a graph where entities (e.g Person, Article, Product) are connected by explicitly defined relationships (e.g parent, datePublished, price).  


When you author Editor markup, each data item you create will have a URI which serves as:
  1. A unique resource identifier or unique label for the data item
  2. Instructions to Schema App re: where to deploy the Editor markup
  3. An indication that the web page is the "home base" for that particular entity, or the main location in your knowledge graph for information about that entities or topic.

There are practical deployment and SEO benefits to using URIs as unique labels, and deployment instructions. The third use case suggests that URIs can also provide a strategy for mapping and organizing information about your Organization, its areas of expertise, and contact information.


A Common Problem: Why is my data item just showing as a URL?

You are previewing markup in the Schema App Editor and you don't see the full data item you made. 

This is expected behaviour, based on a rule of thumb we call the "Three Hops Rule".  It happens in our JSON-LD preview tool and in Production with some slight differences.

Scenario 1: In the Editor Preview
When a data item is nested down 3 layers from a top level entity and belongs to a different URL, we do not include it in the markup preview. In this case, if the data item is 3 "hops" away from the primary entity, we will specify the relationship or property, and the @id or URI of that but not its contents of the data item. This is done to lower complexity when reviewing markup. You can always navigate to the data item itself in the Editor to review it.  

Scenario 2: In Production during Testing or in GSC
When a data item is nested 3 layers from the top level entity and belongs to a different URL, we do not include it in the markup. We do this because it is likely that the content referenced in that nested data item isn't actually present on the page in question. To avoid adding markup that doesn't actually reflect the content on the live page, the software abbreviates or truncates the data items that it deems to be "too far away" to show only the URI or URL of that information. If the content being described exists on that page, consider making a data item that "lives on" or has a URI that reflects that URL of the page.

As always, if you want a second set of eyes on your work, don't hesitate to reach out to support@schemaapp.com.

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article