Skip to content

Give each AI-debate cluster page its own search intent (Task 2) - #296

Merged
Programcode merged 3 commits into
mainfrom
t3/retitle-dedupe-ai-debate-pages
Nov 2, 2026
Merged

Programcode merged 3 commits into
mainfrom
t3/retitle-dedupe-ai-debate-pages

Conversation

@Programcode

Copy link
Copy Markdown
Owner

Task 2 from the 2 November organic spec: each page in the AI-debate cluster now targets its own query, so the four pages stop competing with each other. The changes are to titles, H1s, meta descriptions, first sentences and sections. No app code changed.

Draft. Do not merge or deploy without Adam's OK.

Titles before and after

Page Title before Title after H1 after
/ai-debate-practice Best AI Debate Practice Tools (2026): Sparring and Timed Rounds AI Debate Practice: Timed Rounds Against an AI Opponent AI debate practice with timed rounds and a scorecard
/best-ai-debate-tools Best AI Debate Tools Compared (2026) Best AI Debate Tools (2026): 8 Compared for Prep and Practice The best AI debate tools in 2026, compared
/ai-debate-coach AI Debate Coach AI Debate Coach: Strategy, Drills and Feedback AI debate coach for your motion, side and speech
/ai-debate-case-generator AI Debate Case Generator with Citations AI Debate Generator: Cases, Rebuttals and Closings with Citations AI debate generator for cases with citations
/best-ai-for-debate Which AI Is Best for Debate? (2026 Guide) unchanged unchanged

All titles end with "| DebateOwl". "Best" now appears in the titles of only /best-ai-debate-tools ("best AI debate tools") and /best-ai-for-debate ("which AI is best for debate"). The four pages lead with their keyword in the first sentence (the lead under the H1). Each has dateModified 2026-11-02 and a self-referencing canonical.

What changed on each page

  • /best-ai-debate-tools is now the cluster's one listicle. It is a numbered list of 8 tools, each with a "best for" label. DebateOwl is Add Vercel Web Analytics to project #1 and marked "our top pick", and a line under the byline says DebateOwl makes the list and that the Add Vercel Web Analytics to project #1 ranking is our editorial pick. A "How we compared" box gives the criteria and the check date. An "At a glance" table and an ItemList follow. The title count comes from the list: the generator stops if the numbered headings and items disagree. The "eight criteria" and "Where DebateOwl fits" sections were folded into the box and entry Add Vercel Web Analytics to project #1.
  • /ai-debate-practice now reads as a product page. The top covers what a Sparring round is, the three formats with their speech times (from packages/core/src/sparring/formats.ts), what the scorecard shows (100 points split into Logic, Evidence, Delivery and Strategy at 25 each, from SparringScorecardSchema) and how to start. The 6-row comparison is cut to 3 rows (DebateOwl, ChatGPT/Claude, Debate Ladder) with a link to /best-ai-debate-tools. The 45-minute session and the worked example stay. The "which tool for which debater" list was removed.
  • /ai-debate-coach gets a short "Try the AI debate coach" section.
  • /ai-debate-case-generator gets a paragraph that uses "AI debate generator" and links the free /tools/debate-motion-generator.
  • check-site now fails the build when two indexed pages share a <title>. I tested this by putting a duplicate title into dist/: it reported the clash, and it passed again once the file was restored.

Deferred: CTAs to /ai-debate

The spec wants the practice and coach CTAs to point at /ai-debate, but that page doesn't exist yet: Task 1 needs Adam's product OK. check-site fails the build on an internal link that doesn't resolve, so for now the CTAs go to the trial (/app) and pricing. Point them at /ai-debate in the PR that ships it.

Coordination with Task 3 (internal links)

  • I didn't touch CLUSTERS, LINK_PHRASES, EXTRA_RELATED, CONTENT_DATE, GuideHub.tsx or en.json.
  • About 25 other guides changed. The only change on each is the Related-block anchor text, because the generator uses the target page's H1 as the anchor. public/llms.txt changed the same way.
  • One description in /best-ai-for-debate ("Compare by question") changed because the practice page no longer has a tools table. The anchor and link are the same.
  • public/*.html and llms.txt are generated, so a conflict with Task 3 is fixed by re-running python3 scripts/generate_seo_content.py after the merge.

Sources for competitor facts (all checked 2 November 2026, on each product's own site)

  • WinDebate, windebate.ai: six formats; free tier with 1 research session, 10 drills and 1 Live Assistant round a month; Plus $19.99/month or $189.99/year; Pro $39.99/month or $289.99/year; Live Round Assistant, drills, rebuttal trees.
  • PublicForumAI, publicforumai.com and /pricing: built for PF; free with 3 rounds and 5 AI cases a month plus 2 Premium cases; Premium $9.99/month or $79/year; tech and lay judge feedback, flow drills, 15 modules; "not meant to be used in real rounds".
  • Debate Ladder, debateladder.com: voice-first; opening, rebuttal and closing; judge on 5 criteria; Elo from 500; 100 free credits, about 1 credit per minute. The price of more credits isn't on the site, and the page says so.
  • ArguFight, argufight.com: 5 rounds/24h or 3 rounds/1h; up to 3 AI judges scoring 0–100; AI opponent option; public with spectators; free to start; 26 languages.
  • debatelab.ai, debatelab.ai: casual, WSDC and AP modes; drills for rebuttal, structure, weighing, evidence and strategy. "Completely free" comes from the FAQ in its own page bundle, and the copy credits it to "its FAQ".
  • Claude, claude.com/pricing: free plan; Pro $20/month or $17/month billed annually ($200 up front).
  • ChatGPT, chatgpt.com/pricing: a free version and paid plans named Go, Plus and Pro. The prices didn't load in readable form (Cloudflare and client-side rendering), so the page names the plans without prices.

DebateOwl facts: 3-day free trial with no credit card, then $5/month + tax, no free plan (src/config/site.json).

Checks

  • python3 scripts/generate_seo_content.py, python3 scripts/check_templating.py: pass
  • npm test (guards, including the 700-word and shared-sentence checks): 94 passed
  • npm run build (check-site, check-links): pass
  • npm run docs:check, npm run lint: pass
  • npm run verify at this head: all 9 steps passed (docs, jargon, typecheck, guards, lint, edge, build, smoke, sw-offline) in 112 s
  • I didn't drive the app with verify-debatelab: only static guide pages changed.

Preview (staging-pinned, behind Vercel login): https://debatelab-staging-n707du97n-adam-gaborjanis-projects.vercel.app/best-ai-debate-tools

🤖 Generated with Claude Code

/best-ai-debate-tools is now the one listicle: a numbered list of 8 tools,
each with a "best for" label and a source link, DebateOwl first as a
disclosed editorial pick, a "How we compared" box and an ItemList.
/ai-debate-practice drops its listicle title and opens as a product page
(what a round is, formats, the scorecard), with a 3-row comparison that
points to the list. The coach and case generator pages get new titles,
H1s and first sentences on their keywords, a "Try it" section and a link
to the free motion generator.

check-site now fails when two indexed pages share a <title>.

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

coderabbitai Bot commented Nov 2, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@Programcode
Programcode marked this pull request as ready for review November 2, 2026 18:07
Copilot AI balanced review requested due to automatic review settings November 2, 2026 18:07
@Programcode
Programcode merged commit 3916697 into main Nov 2, 2026
3 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. Try requesting a review at a lower effort level.

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