问答
Rich results are not showing: a debugging order that works
Valid markup is necessary but not sufficient. Work through eligibility, indexing, visible content and the enhancement reports — in that order.
更新于 2026年4月11日 · 约 3 分钟
You wrote valid JSON-LD, the Rich Results Test is green, and the search result still looks like a plain link. That is a normal place to be stuck, because “valid” and “shown” are two different states. The fix is to work through the causes in a fixed order instead of rewriting the markup again.
Check eligibility before anything else
Some types no longer produce rich results at all. If you are waiting for one of these, you are waiting forever.
| Type | Rich result status |
|---|---|
| Product | Active — price, availability, rating |
| Article / BlogPosting | Active |
| BreadcrumbList | Active |
| LocalBusiness | Active — local results |
| Event | Active |
| VideoObject | Active |
| Recipe | Active |
| FAQPage | Restricted — shown only for well-known, authoritative government and health sites |
| HowTo | Deprecated — no longer shown on mobile or desktop |
| Self-serving Review | Ineligible — reviews a site collects about its own products |
If your type is in the bottom three rows, the markup is not broken. There is simply no rich result to earn.
Then confirm the content is visible
Structured data must describe content a visitor can see on the page. A rating, a price, an author or a question that exists only inside the JSON is a violation, and Google will ignore it rather than display it.
Open the page as a user and check that every field in your markup is represented. A price that lives in the JSON but not in the HTML is the single most common cause of “valid but not shown”.
Then confirm the page is indexed
A rich result needs an indexed page. Confirm the URL is not blocked by robots.txt and is in the index:
# 抓取页面,提取并格式化每个 JSON-LD 块
curl -s https://example.com/product | \
python3 -c "import sys,re,json;[print(json.dumps(json.loads(m),indent=2)) for m in re.findall(r'<script type=\"application/ld\\+json\">(.*?)</script>',sys.stdin.read(),re.S)]"
If that prints nothing, the crawler is not seeing your markup — usually because a tag manager or client-side script adds it after the initial render. If it prints the block, compare it against what the Rich Results Test reports for the live URL. They should agree.
Then read the right Search Console report
In Search Console, the enhancement reports tell you which items are valid, which carry warnings, and which are invalid. Three things to keep in mind:
- Valid is not shown. The report is an eligibility signal, not a display promise. Google shows rich results selectively, often query by query.
- Warnings are not errors. A warning means a recommended field is missing; the item can still be eligible.
- The URL mismatch bites. Check the canonical URL. If the report is for
https://example.com/productand you are inspectinghttps://example.com/product?ref=abc, you are looking at two different pages.
Then wait
Google has to recrawl and reprocess the page. Crawling can take several days to several weeks. You can request indexing of the specific URL to speed it up, but that only asks for a fresh crawl — it does not force a rich result to appear.
Common mistakes
Rewriting the markup when the type is retired. The most common wasted afternoon is fixing HowTo markup that no longer has a rich result to win.
Testing a snippet instead of the live URL. The Rich Results Test can validate pasted code that the live page never serves. Always test the live URL too.
Ignoring mobile. Google indexes the mobile version. Markup that only renders on desktop is effectively missing.
Marking up invisible content. Fields that only exist in the JSON are ignored at best and a violation at worst.
Treating the enhancement report as a guarantee. It confirms validity, not display.
Where this tool fits
The JSON-LD generator checks required fields as you type and keeps one valid block per type, which removes the most common source of “invalid” items. Validate there, confirm the live URL, then let the recrawl do its job.
Frequently asked questions
▸ My markup is valid. Why is there no rich result?
Validity is not eligibility. Check that the type still produces rich results at all, that the content it describes is visible on the page, that the page is indexed, and that Google has chosen to show the feature. Any one of those can stop it.
▸ How long until a rich result appears?
There is no fixed timeline. Google has to recrawl the page and reprocess it, which can take several days to several weeks. Requesting indexing of the URL is the fastest way to nudge it, but it still does not guarantee the feature is shown.
▸ Does the Search Console enhancement report mean the rich result will show?
No. The report tells you whether your markup is valid and eligible. Google shows rich results selectively, so a valid item can sit in the report without ever appearing in search.
▸ Can JavaScript-injected JSON-LD be missed?
It can, if the markup is added after render and the crawler does not run the script, or if the script fails. Server-rendered JSON-LD is the dependable option.
▸ Should I check the mobile page or the desktop page?
Both, and the canonical one especially. Google indexes the mobile version of a page, so markup that only exists on desktop can be invisible to indexing.