Apply an SEO/GEO fix
You implement one targeted fix from an audit, as a small PR. One fix per run. Never push to
the default branch, never deploy, never touch business logic, pricing, legal text, the API, or the
visual design, only SEO/GEO metadata and content. When in doubt, return the proposal as text instead
of opening a PR.
Workflow
Pick one finding from the seo-geo-audit report (start with the heaviest-weight FAIL). Examples:
- JSON-LD rendered client-side → move to a plain
<script type="application/ld+json"> in the server component.
- A deep page canonicalizing to
/ → add a self-referencing canonical to its metadata.
- Missing/weak title or description → write a specific one (30-65 char title, 120-160 char description).
- No question-style headings / answer-first block → restructure the top of the page.
- Missing
Organization/FAQPage/Article schema → add it (matching the visible content). Copy-paste starting points: references/schema-library.md.
llms.txt inconsistent with the site → reconcile.
Find the file that actually renders the page before editing. Confirm locally
(next start / dev server) which file serves the route, editing the wrong template is the most
common wasted change. (See PLAYBOOK.md §2.5.)
Make the minimal change. Match the surrounding code's style. Keep tone factual: no emojis, no
em-dashes, minimal "AI" hype in finance/health/legal, never expose internal tech/vendors.
Verify with curl, not the browser (SSR vs client render):
# after building/serving locally:
curl -s localhost:3000/route | grep -oP 'canonical href="[^"]*"'
curl -s localhost:3000/route | grep -c 'application/ld+json'
Confirm the change is in the server HTML.
Open a small PR (never to the default branch, never --no-verify):
git checkout -b seo/<short-description>
git add -A && git commit -m "seo: <what and why>"
git push -u origin seo/<short-description>
gh pr create --title "SEO: <what>" --body "Change: <...>. Page/file: <...>. Why: <...>. Verify: <curl command + expected output>."
Return the PR number and a two-sentence summary.
Stop conditions
If the fix would reach beyond SEO/GEO metadata and content, or you're unsure of its impact, do not
make it, return the recommendation as text. A skipped risky change beats a shipped wrong one. For a
strict pre-merge gate, use the reviewer agent in ../../agents/reviewer-agent.md.
Reference files (read on demand)
references/schema-library.md: copy-paste JSON-LD for the common types.
../../references/PLAYBOOK.md: the gotchas behind most fixes (SSR JSON-LD, canonical, host, noindex).
../../references/ai-crawlers.md: correct robots.txt handling when the fix touches crawler access.
../../references/tactics-spectrum.md: the white-hat boundary; never implement gray/black-hat changes.
1---2name: seo-geo-fix3description: Apply an SEO/GEO fix4---56# Apply an SEO/GEO fix78You implement **one** targeted fix from an audit, as a **small PR**. One fix per run. Never push to9the default branch, never deploy, never touch business logic, pricing, legal text, the API, or the10visual design, only SEO/GEO metadata and content. When in doubt, return the proposal as text instead11of opening a PR.1213## Workflow14151. **Pick one finding** from the `seo-geo-audit` report (start with the heaviest-weight FAIL). Examples:16 - JSON-LD rendered client-side → move to a plain `<script type="application/ld+json">` in the server component.17 - A deep page canonicalizing to `/` → add a self-referencing canonical to its `metadata`.18 - Missing/weak title or description → write a specific one (30-65 char title, 120-160 char description).19 - No question-style headings / answer-first block → restructure the top of the page.20 - Missing `Organization`/`FAQPage`/`Article` schema → add it (matching the visible content). Copy-paste starting points: `references/schema-library.md`.21 - `llms.txt` inconsistent with the site → reconcile.22232. **Find the file that actually renders the page** before editing. Confirm locally24 (`next start` / dev server) which file serves the route, editing the wrong template is the most25 common wasted change. (See `PLAYBOOK.md` §2.5.)26273. **Make the minimal change.** Match the surrounding code's style. Keep tone factual: no emojis, no28 em-dashes, minimal "AI" hype in finance/health/legal, never expose internal tech/vendors.29304. **Verify with `curl`, not the browser** (SSR vs client render):31 ```bash32 # after building/serving locally:33 curl -s localhost:3000/route | grep -oP 'canonical href="[^"]*"'34 curl -s localhost:3000/route | grep -c 'application/ld+json'35 ```36 Confirm the change is in the **server HTML**.37385. **Open a small PR** (never to the default branch, never `--no-verify`):39 ```bash40 git checkout -b seo/<short-description>41 git add -A && git commit -m "seo: <what and why>"42 git push -u origin seo/<short-description>43 gh pr create --title "SEO: <what>" --body "Change: <...>. Page/file: <...>. Why: <...>. Verify: <curl command + expected output>."44 ```45 Return the PR number and a two-sentence summary.4647## Stop conditions48If the fix would reach beyond SEO/GEO metadata and content, or you're unsure of its impact, **do not49make it**, return the recommendation as text. A skipped risky change beats a shipped wrong one. For a50strict pre-merge gate, use the reviewer agent in `../../agents/reviewer-agent.md`.5152## Reference files (read on demand)53- `references/schema-library.md`: copy-paste JSON-LD for the common types.54- `../../references/PLAYBOOK.md`: the gotchas behind most fixes (SSR JSON-LD, canonical, host, noindex).55- `../../references/ai-crawlers.md`: correct robots.txt handling when the fix touches crawler access.56- `../../references/tactics-spectrum.md`: the white-hat boundary; never implement gray/black-hat changes.