Background
Every GEO engagement repeats the same checks: are AI crawlers allowed, is the body text injected by JavaScript, will the entity be confused with a same-named company, are there answer blocks an engine can quote whole. Running that from a human checklist has two problems: items get missed, and two baselines are hard to keep methodologically identical — and once the method drifts, the before/after comparison is worthless.
What we did
- Froze the workflow into a three-stage skill (crawlable → identifiable → citable) that Claude Code / agents can call directly
- Moved the repeatable judgements into scripts: site health, render check, baseline scoring, domain check, baseline sheet
- Required two baselines (B0 before the rebuild, B1 before submitting for indexing) so content work and index coverage are not credited to each other
- Built in the checks that are easy to get wrong: a bilingual site that switches language in JavaScript cannot be detected by comparing body length with JS disabled; an engine repeating your company name does not mean it knows you
Technical approach
| Component | Choice |
|---|---|
| Skill format | Claude Code Skill (SKILL.md + scripts) |
| Script language | Python 3 |
| Render & overflow checks | Playwright (Chromium) |
| Output | Site-health report and baseline score sheet (Markdown / CSV) |
Results
| Item | Detail |
|---|---|
| Bundled scripts | 5: site health, render check, baseline scoring, domain check, baseline sheet |
| Sites it has run on | 3: siyou365.com, scimpexp.com, tax.siyou365.com |
| Baseline method | 12 buyer questions × 3 AI engines, each scored cited / mentioned / absent |
| Client-site outcome data | Not disclosed |
Authorization
Own product. The methodology and script structure are public; baseline data measured on client sites is not disclosed.