You ran the Google Rich Results Test on your homepage or about page. The result was "FAQ" and "Breadcrumb" — and nothing else. Maybe even just "no rich results detected."
You go check the schema.org validator. Everything is green. Your Person entity is rich. Your Organization is fully populated. Your sameAs has six profile URLs. Your @id references resolve. There are no parse errors.
Both tools are correct. The schema is valid. It just is not eligible for the visual rich result UI Google ships in search.
This trips up a lot of people who do schema seriously. It tripped me up two weeks ago on my own site after a careful entity-binding pass. Here is what is actually going on and what to add to fix it.
The two layers Google evaluates
Google reads structured data for two distinct purposes, and most people conflate them.
Layer one — the Knowledge Graph. This is the entity reconciliation layer. Person, Organization, WebSite, BookSeries, SpeakableSpecification, sameAs, mainEntityOfPage, kgmid, Google Maps cid, the whole entity-anchor stack. These signals feed the model's stored graph of "which URL owns which entity." They are critical for AI Search citations, name-only query routing, and the long-term answer to "does Google know who you are."
Layer two — the rich result UI. This is the visual enhancement layer in the SERP. FAQ accordion, breadcrumb path under the title, recipe card, product card, review stars, event date, software app stars. Each one of these is tied to a specific schema type Google has explicitly added to its rich-results product.
Person, Organization, WebSite, BookSeries — none of these have rich result UI. They feed Knowledge Graph. The Google Rich Results Test only renders types in layer two, so a page that is mostly layer-one schema legitimately shows "no rich results" even when the schema is excellent.
The full list of types that render in Rich Results Test
Per Google's own documentation as of 2026, these are the schema types that produce rich result UI in search:
- Article / NewsArticle / BlogPosting
- Book actions — requires real ISBN linked to Google Books, not Amazon ASIN
- BreadcrumbList
- Carousel — via ItemList with eligible items (Article, Book, Recipe, Course, Restaurant, Movie)
- Course / CourseInfo
- Dataset
- DiscussionForumPosting
- EmployerAggregateRating
- Estimated salary
- Event
- FAQPage
- Fact Check (ClaimReview)
- HowTo
- JobPosting
- Learning Video
- LocalBusiness — vertical types like Restaurant, Hotel, AutoRepair, etc.
- Logo — a subtype-eligible Organization property
- Math Solver
- Movie
- Practice Problem
- Product — with valid global ID + offers
- Product variants
- ProfilePage — added 2023, the wrapper for Person/Org-centric pages
- Q&A page
- Recipe
- Review snippet
- Sitelinks search box — via WebSite.potentialAction.SearchAction
- Software App
- Speakable (beta, news content)
- Subscription / paywalled
- Vacation rental
- Vehicle listings
- VideoObject
If your page only has Person + Organization + WebSite + BookSeries + BreadcrumbList + FAQPage, the test will show BreadcrumbList and FAQPage. Everything else is invisible in this test. Not because it is wrong. Because there is no UI for it.
ProfilePage is the missing piece for "About" and operator-bio pages
Most people who hit this symptom are running the test against their about page, an author bio, an operator-bio, a team-member page, or a practitioner page. The page is essentially a profile of a person or an organization. The whole point of the page is the entity.
For that pattern, Google added ProfilePage in 2023 specifically. It is a layer-two schema type that wraps your layer-one Person or Organization, and unlocks the dedicated profile rich result presentation in search.
Minimum viable ProfilePage:
{ "@context": "https://schema.org",
"@type": "ProfilePage",
"name": "Your Name — Author profile",
"url": "https://yoursite.com/about/",
"mainEntity": { "@id": "https://yoursite.com/#yourname" },
"dateCreated": "2024-01-01"
}
Required: mainEntity referencing your Person or Organization by @id, plus either dateCreated or datePublished.
Recommended for stronger rendering: dateModified, primaryImageOfPage (an ImageObject with the profile photo), breadcrumb (referencing your BreadcrumbList by @id — see the gotcha below), and an about field pointing back to the same entity.
Drop this into a <script type="application/ld+json"> block on your about page or homepage, redeploy, and re-run Rich Results Test in 24 to 48 hours. ProfilePage will show.
Three more layer-two types worth adding where they fit
Once you understand the layer distinction, two other additions show up almost for free on a typical author or small-business site.
ItemList for catalog pages. If you have a books page, a portfolio page, a services page, or a tools index, wrap the list with ItemList. Each itemListElement references a Book, Article, Recipe, Course, Restaurant, or other carousel-eligible type. Google decides whether to render this as a horizontal carousel in search, but the eligibility is required first.
Article / BlogPosting on blog posts. This one is usually already there from a CMS template, but worth double-checking. The Article type unlocks the "Top stories" presentation and the visual lead-image enhancement in search.
SoftwareApplication for tool pages. If you publish browser-side tools, calculators, generators, or apps, each tool page should declare @type: "SoftwareApplication" with applicationCategory, operatingSystem, and offers. Google may render these in the apps-style rich result format.
The dangling reference gotcha (this just bit me)
When you add ProfilePage, the recommended breadcrumb field is a reference to your existing BreadcrumbList:
"breadcrumb": { "@id": "https://yoursite.com/about/#breadcrumb" }
That reference only resolves if your BreadcrumbList block also declares the same @id. If your BreadcrumbList does not have an @id (most templates do not, since BreadcrumbList rarely needs to be cross-referenced), Google's parser will see the reference as a phantom entity and emit a critical error: Unnamed item — Missing field "itemListElement" — type BreadcrumbList.
Fix is one line. Add "@id": "https://yoursite.com/<this-page>/#breadcrumb" to your BreadcrumbList block where the page URL matches what ProfilePage references. The reference now resolves to the real BreadcrumbList with its itemListElement, the error clears, and ProfilePage validates clean.
This is one of those failure modes that does not show up in the schema.org validator (which tolerates dangling references) but does show up in Rich Results Test (which strictly validates each declared rich-result type). Worth a defensive pass any time you add a new schema block that references another by @id.
The triage table for "no rich results" symptoms
If Google Rich Results Test returns no results or fewer than you expected, walk this list:
-
Are any of your declared
@typevalues rich-result-eligible? Cross-check against the list above. If everything on your page is layer-one (Person, Organization, WebSite, etc.), no rich result will render. Add ProfilePage, ItemList, Article, or whichever layer-two type fits your content. -
Did any JSON-LD block fail to parse? Run
JSON.parseover every<script type="application/ld+json">block on the rendered HTML — Rich Results Test silently drops blocks with syntax errors. The schema.org validator is more forgiving and may show them as "valid." -
Are there dangling
@idreferences? Every{ "@id": "..." }reference needs a corresponding inline block with the same@id. Missing inline = phantom node = "Missing field" critical error. -
Are you using a deprecated property? Google deprecates rich-result properties periodically. Recipe's
nutritionschema, for instance, has changed twice in five years. Check Google's Rich Results documentation for the type you're using. -
Is your Book using an Amazon ASIN as ISBN? ASINs are not real ISBNs. Google Books cannot link them. Book schema will validate but never render. If you want Book to show, get a real ISBN (KDP gives them free) and use that.
-
Is your Product missing a global identifier? Google flags
Productwithoutgtin,mpn,sku,isbn, orbrandas "missing global identifier" — the product will not appear in Merchant Listings.
The triage usually lands on item 1: the page is layer-one heavy and needs one layer-two type added.
What I shipped on jwatte.com when I hit this
My own homepage was showing only FAQ and Breadcrumb in Rich Results Test even though the schema was carefully built — canonical Person entity at a shared @id, full sameAs with 14 off-site anchors, kgmid in identifier, Organization with founder reference, the whole entity-binding stack. All layer one. None of it visible in the layer-two tester.
I added two things in a single deploy:
@type: "ProfilePage"on the homepage and/about/, withmainEntityreferencing the canonical Person@id,dateCreated,datePublished,dateModified,primaryImageOfPage, andbreadcrumbreferencing the BreadcrumbList by@id.@type: "ItemList"on the homepage and/books/, withitemListElementenumerating the six books in the Trap Series + Digital Empire Series.
While testing, I also hit the breadcrumb @id dangling reference gotcha and patched the BreadcrumbList to declare its own @id matching what ProfilePage references.
After redeploy, the Rich Results Test surface on the homepage went from two types (FAQ + Breadcrumb) to five (ProfilePage + ItemList + FAQ + Breadcrumb + Book — the books are uncertain due to ASIN linkage but at least no longer broken). The about page went from one type (Breadcrumb) to two (Breadcrumb + ProfilePage). The books page went from one type to two (Breadcrumb + ItemList).
The two-axis mental model
The takeaway from this for any structured data work is the two-axis mental model:
- Layer one (Knowledge Graph) — Person, Organization, sameAs,
@idgraph, kgmid, Maps cid, dual-typing, mainEntityOfPage. Required for AI Search citations and name-only query routing. Invisible to Rich Results Test. - Layer two (Rich Result UI) — FAQ, HowTo, Recipe, Article, Product, Event, Course, SoftwareApplication, ProfilePage, ItemList. Required for visual SERP enhancements. Visible in Rich Results Test.
Both matter. They serve different purposes. A schema strategy that only addresses one will under-perform on the other axis. The Rich Results Test only audits axis two. Schema.org's validator audits both for syntactic validity but does not tell you which axis a type belongs to. Mega Analyzer and Schema Validator on this site now flag both axes — Entity Anchors section for KG signals and the per-node validity rules for rich-result-required fields.
If your page is layer-one heavy and the test came back empty, you do not have a schema bug. You have a missing layer-two type. Pick the right one for your content, declare it, redeploy.
Related reading
- How I lost a Google AI Mode citation by cleaning up my schema — the layer-one playbook: canonical entity binding, kgmid, Maps cid, dual-typing, the Watte family network.
- Why five inline Person blocks broke my AI Search visibility — what happens when you declare the same entity multiple times inline with conflicting properties.
- Gravatar and Wikidata as entity signals — the off-site identity anchors AI Search treats as third-party verification.
- Mega Analyzer — surfaces both layers in one report: Entity Anchors section for KG signals + Schema tab for rich-result-required fields.
- Schema Validator — strict per-type validity check that emits info-level findings on missing ProfilePage, missing Maps cid, missing kgmid, and dangling @id references.
If you are running a small business or indie practice and trying to claim a Google Knowledge Panel without paying for SEO retainers, the chapter on the under-$100 entity-binding stack in The $97 Launch covers the same playbook end-to-end, including Gravatar, Linktree, ORCID, the major industry directories, and the ProfilePage pattern above. It is mostly a checklist. Cheaper than one hour of an SEO consultant.
This post is informational, not legal or SEO-consulting advice. Mentions of Google, Amazon, LinkedIn, and other third parties are nominative fair use. No affiliation is implied.