---
title: "Structured data that misleads · Agent Wranglers"
url: https://agentwranglers.se/playbook/seo/search-spam-and-penalties/misleading-structured-data
id: SEO-59
level: Avoid
updated: 2026-10-22
tokens: 1115
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Structured data that misleads

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Search spam and penalties](https://agentwranglers.se/playbook/seo/search-spam-and-penalties.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-22.

- ID: SEO-59
- Level: Avoid
- Chapter: [Search spam and penalties](https://agentwranglers.se/playbook/seo/search-spam-and-penalties.md)
- Rule: Structured data that says something visitors cannot see on the page. Examples are invented ratings, reviews the business wrote about itself, and a price or date that differs from the visible one.
- Check: A build test reads each page's JSON-LD. Every `name`, `price`, `ratingValue` and `reviewCount` value appears in the visible text, and no `LocalBusiness` or `Organization` marks up an `aggregateRating` of itself.
- How: Google's structured data guidelines forbid marking up hidden or misleading content, such as fake reviews, and ask for a true picture of the page. Bing says misleading markup may be ignored and hurt trust. A structured data manual action removes the page's rich results, but Google says it does not change ranking. Google also gives no review stars to a `LocalBusiness` or `Organization` that controls reviews about itself. Build markup from the same page data as the visible text, as [Describe each page for machines](https://agentwranglers.se/playbook/seo/search-result-appearance/structured-data.md) says.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
const values = data => Object.entries(data).flatMap(([key, value]) => typeof value === 'object' && value ? values(value) : CHECKED_KEYS.includes(key) ? [String(value)] : []);
for (const value of values(jsonLd)) assert.ok(visibleText.includes(value), `${path}: ${value} is in the markup but not on the page`);
assert.ok(!['LocalBusiness', 'Organization'].includes(jsonLd['@type']) || !jsonLd.aggregateRating, `${path}: self-serving rating`);
```

### Python example

```python
def values(data):
    for key, value in data.items():
        if isinstance(value, dict):
            yield from values(value)
        elif key in CHECKED_KEYS:
            yield str(value)

for value in values(json_ld):
    assert value in visible_text, f"{path}: {value} is in the markup but not on the page"
assert json_ld["@type"] not in ("LocalBusiness", "Organization") or "aggregateRating" not in json_ld, f"{path}: self-serving rating"
```

## Sources

- [Google Search Central – General structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data/sd-policies)
- [Google Search Central – Review snippet guidelines](https://developers.google.com/search/docs/appearance/structured-data/review-snippet)
- [Bing Webmaster Guidelines](https://www.bing.com/webmasters/help/webmaster-guidelines-30fba23a)

## Related rules

- SEO-44 [Validate rich results before every release](https://agentwranglers.se/playbook/seo/search-result-appearance/rich-results-validation.md) in SEO
- SEO-16 [Describe each page for machines](https://agentwranglers.se/playbook/seo/search-result-appearance/structured-data.md) in SEO
- SEO-63 [Ask for honest reviews and never fake one](https://agentwranglers.se/playbook/seo/local-search/honest-reviews.md) in SEO
- ECM-4 [Describe each product for machines from the same data](https://agentwranglers.se/playbook/ecommerce/catalog-and-prices/product-markup.md) in E-commerce and fulfilment

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/seo/search-spam-and-penalties/misleading-structured-data">Agent Wranglers SEO playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Buying an expired domain for its old standing](https://agentwranglers.se/playbook/seo/search-spam-and-penalties/expired-domain-abuse.md)
- Next: [Read and answer a manual action](https://agentwranglers.se/playbook/seo/search-spam-and-penalties/manual-actions.md)
- [Search spam and penalties](https://agentwranglers.se/playbook/seo/search-spam-and-penalties.md)
