Case study
Making a 270-Page Site Citable by AI
A site that was 84% without structured data got validated schema on its priority pages, corrected hreflang across both languages, and fixes at the template level.
- Project
- AEO and GEO technical lead
- Industry
- Cybersecurity / AEO and GEO
- Role
- Technical lead, AEO / GEO
- Python
- JSON-LD
- hreflang / x-default
- Search Console
- AI visibility data
The context
A B2B cybersecurity hardware vendor with a bilingual English/German site of about 270 pages on an enterprise CMS. The work ran in three technical phases: audit, implementation and monitoring.
The problem
The vendor wanted to be cited by AI assistants, and to know exactly why competitors were being cited instead.
- About 84% of pages had no structured data
- Gaps in hreflang coverage across English and German
- Template-level defects repeated across whole content types
My responsibility
- Built a reproducible crawler and audit toolkit in Python covering structured data, hreflang and x-default, canonicals, the internal-link graph, orphans, redirects, titles and meta, headings, alt text, image weight and response time
- Ran the technical audit and an AI-citability review, with a competitor citation-gap teardown
- Wrote implementation-ready specs: JSON-LD blueprints per schema type, 45 validated blocks for 27 priority pages, a hand-verified EN/DE hreflang plan, an internal-linking plan and a content gap analysis
- Rolled out schema, hreflang and x-default fixes and template corrections in the CMS, with structured-data partials and post-publish verification tooling, then monitored technical health after launch
Architecture
- Sitemap~270 pages
- CrawlerPython toolkit
- AuditSchema · hreflang
- QA passEvery number re-derived
- Specs45 JSON-LD blocks
Key decisions
A reproducible toolkit, not screenshots
Every finding comes from a crawler and audit toolkit in Python, so it can be re-run rather than screenshotted.
Template-level defects first
Template-level defects were prioritised, because one fix corrects an entire content type.
Re-derive every number
Before anything reached the client, every headline number was independently re-derived in a QA pass.
Technical challenges
1.Why competitors get cited
An AI-citability review found what the content AI assistants already cite has in common, and a competitor citation-gap teardown isolated what cited competitors do differently.
2.A site-wide schema gap
About 84% of pages had no structured data. JSON-LD blueprints per schema type closed it on the 27 priority pages first.
3.Errors in our own figures
The QA pass caught three small inaccuracies in the audit's own figures before delivery, which is the reason it exists.
Results
- Validated schema on the priority pages of a site that was 84% without structured data
- 45 validated JSON-LD blocks for 27 priority pages
- Hreflang corrected across both languages, and fixes made at the template level
- 3 errors in the audit's own figures caught in QA before delivery