Skip to content

De-template the seven comparison pages and fix their copy slips - #273

Merged
Programcode merged 1 commit into
mainfrom
seo/aeo-detemplate-1029
Oct 29, 2026
Merged

Programcode merged 1 commit into
mainfrom
seo/aeo-detemplate-1029

Conversation

@Programcode

Copy link
Copy Markdown
Owner

Task 2 of the 29 Oct AEO audit. Stacked on #272, so the base is seo/aeo-hubs-1029 and this diff shows only Task 2.

What changed

  • Shared sentence removed. "That is the part DebateOwl is built for: …" was on three pages. Each page now has its own sentence:
    • ChatGPT vs Claude: what a chatbot loses between chats (motion, side, speech times) and what a Current Debate keeps.
    • Debate Ladder: written case prep, compared with a voice-first ranking.
    • How to prepare: DebateOwl fits at step 3, and Sparring times the round at step 7.
  • Pricing sentence once per page, in the CTA area. It reads: "The DebateOwl app has no free plan (3-day free trial, then $5/month); the separate timer, motion generator, flow sheet and speech-time calculator are free with no account." Everywhere else the pages say "paid after a 3-day trial" or give the price in a table cell. The FAQ answers that used to be the pricing sentence were rewritten for each page, so the visible FAQ and the FAQPage JSON-LD still match.
  • No visible "/tools". It is now a named link everywhere, including the teachers page's "/es/tools and /hu/tools", which now link "Spanish" and "Hungarian".
  • Recommendation blocks vary. The ticked card stays on Debate Ladder and Public Forum. ChatGPT vs Claude has an "If you are… pick…" paragraph. Teachers has a checklist for tomorrow's lesson. Free vs paid and How to prepare each have a one-line callout with different wording.
  • /best-ai-for-debate:
    • The meta description is now Compare DebateOwl, ChatGPT, Claude and other AI tools for debate cases, "If they say" replies and timed practice, with facts as of October 2026. That is one sentence and 144 characters, with no "top pick".
    • The llms.txt blurb now quotes "If they say X, we answer Y" and says "free tools; app $5/month after a 3-day trial".
    • The pricing sentence went from six appearances to one.
  • /chatgpt-vs-claude-for-debate: the title is ChatGPT vs Claude for Debate (2026), and When to Use a Debate Tool | DebateOwl (66 characters before the suffix). og:title and the JSON-LD name follow the title. The JSON-LD headline mirrors the H1 ("ChatGPT vs Claude for debate prep"), which never contained the broken "And", so it is unchanged.
  • Homepage: "Everything you need to win" is now "Everything for your next round", with matching es and hu wording.
  • New check: scripts/check_templating.py splits the visible text of the 7 pages into sentences. It fails if any sentence longer than 12 words appears on more than 2 pages. The pricing sentence, the byline, the disclosure and the "Last updated" lines are exempt. src/test/seo/comparison-templating.test.ts runs it, so npm test (and CI's npm test step) cover it. The generator also refuses a page that shows the pricing sentence more or less than once, or shows a bare "/tools".
  • Test updates that follow from the spec:
    • best-ai-for-debate.test.ts now expects the new description and the linked pricing sentence, shown exactly once.
    • guide-content.test.ts already exempted the required pricing sentence. Its allow-list entry now uses the linked wording.

Acceptance checks (local build of this branch)

  • check_templating.py exists, runs in npm test, and passes. Before this change it flagged exactly the shared sentence above, on 3 pages.
  • The pricing sentence appears exactly once in the visible text of each of the 7 pages. Before: 6, 3, 3, 3, 2, 3 and 2 times.
  • Visible /tools count is 0 on all 7 pages. Before: 9, 6, 3, 5, 4, 6 and 3.
  • The /best-ai-for-debate description is one sentence, 144 characters or fewer, contains "If they say, and has no "top pick". The llms.txt blurb has the quote marks.
  • The /chatgpt-vs-claude-for-debate <title> has no ": And".
  • The homepage does not contain "Everything you need to win".
  • FAQPage JSON-LD parses on all 7 pages, and the question counts are unchanged (6, 6, 6, 5, 6, 6, 6). Jargon grep is 0. Sitemap has 62 URLs. check-links: 0 problems.

Verification

NODE_OPTIONS=--max-old-space-size=3072 npm run verify passed locally: 757 vitest tests, collaboration and edge suites, build with check-site and check-links clean, SW smoke, and 47 Playwright @smoke tests. After that run, one CSS rule was added so the ChatGPT vs Claude verdict block spans both grid columns (screenshots showed the heading stranded in one column). After it I regenerated the pages and reran the templating check and the SEO tests (20 passed). This is a local pass, not CI: GitHub Actions is blocked by billing.

🤖 Generated with Claude Code

- Each page states the pricing sentence once, in its call-to-action area,
  with the free tools linked by name instead of a bare "/tools".
- The shared "That is the part DebateOwl is built for" sentence becomes one
  sentence per page; the ticked pick card stays on two pages, and the others
  get an "If you are… pick…" paragraph, a checklist or a one-line callout.
- /best-ai-for-debate gets a one-sentence meta description with quoted
  "If they say", and the llms.txt blurb quotes it too.
- /chatgpt-vs-claude-for-debate's title loses the broken ": And".
- The homepage heading "Everything you need to win" becomes
  "Everything for your next round" (en, es, hu).
- scripts/check_templating.py fails when a sentence of more than 12 words
  is on more than two of the seven pages; npm test runs it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between db2aa4f and add533d.

Files selected for processing: 19
  • docs/testing.md
  • public/ai-debate-tools-for-teachers/index.html
  • public/best-ai-for-debate/index.html
  • public/best-ai-for-public-forum/index.html
  • public/chatgpt-vs-claude-for-debate/index.html
  • public/debateowl-vs-debate-ladder/index.html
  • public/free-vs-paid-ai-debate-tools/index.html
  • public/how-to-prepare-for-a-debate-with-ai/index.html
  • public/llms.txt
  • scripts/check_templating.py
  • scripts/generate_seo_content.py
  • scripts/seo_comparison_pages.py
  • scripts/seo_guides.py
  • src/locales/en.json
  • src/locales/es.json
  • src/locales/hu.json
  • src/test/seo/best-ai-for-debate.test.ts
  • src/test/seo/comparison-templating.test.ts
  • src/test/seo/guide-content.test.ts
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing.

Comment @coderabbitai help to get the list of available commands.

@Programcode
Programcode changed the base branch from seo/aeo-hubs-1029 to main October 29, 2026 17:07
@Programcode
Programcode marked this pull request as ready for review October 29, 2026 17:08
Copilot AI balanced review requested due to automatic review settings October 29, 2026 17:08
@Programcode
Programcode merged commit c7c785d into main Oct 29, 2026
3 of 10 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants