Repository navigation
Merge 13 overlapping guide pages into 10 survivors - #155
Conversation
Thirteen guide pages repeated the search intent of another page with about 1,700 characters of shared template copy. Each now 301-redirects, path-exact and with or without a trailing slash, to the page that covers the same search: - online-debate-timer-tool -> online-debate-timer - debate-argument-flowchart-tool -> argument-flowchart - debate-weighing-guide, debate-impact-calculus -> how-to-weigh-in-debate - debate-cross-examination-tips -> how-to-cross-examine-in-debate - debate-note-taking-flowing -> how-to-flow-in-debate - debate-case-generator -> ai-debate-case-generator - how-to-write-a-rebuttal-speech -> how-to-practice-rebuttals - wsdc-debate-practice -> world-schools-debate - ai-debate-evidence-research, debate-evidence-verification -> debate-evidence-finder - debatelab-alternatives, ai-tools-for-debate-students -> best-ai-debate-tools The sitemap drops from 52 to 39 URLs. The seven thin survivors get long-form copy in seo_guides.py that combines what the merged pages said and describes the real tools: the timer's four presets and signals, the flowchart's node and link types, Crossfire, Factoids and the Library. how-to-practice-rebuttals gains a section on the shape of a rebuttal speech, and best-ai-debate-tools an FAQ on alternatives. Each changed guide sets its own "modified" date, so dateModified and sitemap lastmod move only on those nine pages. ai-debate-case-generator takes the retired case generator's place in PAGES and in the nav, so it keeps that page's sitewide links. Removing pages shifts the related-guide links on every page; titles, canonicals and JSON-LD of the other pages are unchanged. llms.txt and humans.txt point at the surviving case generator. The Vercel config test now also checks that each guide redirect lands on a live page in one hop, and that no page is left behind or links to a retired slug. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Warning Review limit reachedEnable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Next included review available in 52 minutes. View limit details
ℹ️ Recent review info
📝 Walkthrough
Note 🎁 Summarized by CodeRabbit Free
Comment |
On the preview, /debate-weighing-guide/ gets the trailingSlash 308 to /debate-weighing-guide before any redirect rule runs, then the 301 to /how-to-weigh-in-debate. The /<slug>/ rules never fire, so remove them and say in operations.md how slash URLs reach the survivor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the Codex review of #155: - Case generation always researches the motion; there is no web research switch to turn on. The evidence finder now says so. - WSDC rule 9.2 lets a third speaker present a small part of the team case if the first speaker announced it, and rule 15.3 says a speaker should accept at least two POIs. The World Schools page said otherwise. - British Parliamentary has no reply speech, so the weighing guide no longer pairs it with WSDC's. - The redirect test took the retired slugs from vercel.json, so deleting a rule also deleted its check. It now lists the 13 expected redirects. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The case generator guide told readers to turn on web research, but Generate researches every motion and has no switch. It also put format and instructions in Generate, where they live in the Current Debate. Eight other guides claimed things the app does not do: Sparring reading Library sources, a debate notes field, saved rebuttal blocks, sources used in every answer, and a prep-timer use for the speech timer. gsc_submit.py now inspects the survivors of the four guide slugs that #155 retired. The brand-redirect URLs stay on purpose. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Thirteen guide pages targeted the same search as another page, each with about 1,700 characters of shared template copy. This PR folds each one into a single surviving page and 301-redirects the old URL there. The sitemap drops from 52 to 39 URLs.
Preview (staging project, same
vercel.json): https://debatelab-staging-hr2xgrs4x-adam-gaborjanis-projects.vercel.app (Vercel protection on; agents use the bypass header fromdocs/staging.md)Redirects
Each old URL 301-redirects path-exact, in one hop, to its survivor. With a trailing slash, Vercel's
trailingSlash: false308 runs before any redirect rule, so/debate-weighing-guide/takes two permanent hops (308, then 301) and needs no rule of its own. I first added/<slug>/rules, saw on the preview that they never match, and removed them. The existing/debatelab/brand rules have the same dead slash variants; I left those alone. The survivor is the page that was already deep, or else the URL with the clearest search intent./online-debate-timer-tool/online-debate-timer/debate-argument-flowchart-tool/argument-flowchart/debate-weighing-guide/how-to-weigh-in-debate/debate-impact-calculus/how-to-weigh-in-debate/debate-cross-examination-tips/how-to-cross-examine-in-debate/debate-note-taking-flowing/how-to-flow-in-debate/debate-case-generator/ai-debate-case-generator/how-to-write-a-rebuttal-speech/how-to-practice-rebuttals/wsdc-debate-practice/world-schools-debate/ai-debate-evidence-research/debate-evidence-finder/debate-evidence-verification/debate-evidence-finder/debatelab-alternatives/best-ai-debate-tools/ai-tools-for-debate-students/best-ai-debate-toolsSitemap: 52 URLs before, 39 after (36 guides plus
/,/termsand/privacy). No retired slug appears in the built sitemap, any built page,llms.txt,humans.txtor the JS bundles.Changes from the suggested clusters:
/ai-tools-for-debate-studentsto the/best-ai-debate-toolscluster. Its title, lead and headings ask the same question ("which AI tools help with debate"), and the deep page already covers everything it said./how-to-weigh-in-debate, the phrasing people search, over/debate-weighing-guide. For WSDC I kept/world-schools-debate, which matches the other format pages (/public-forum-debate,/policy-debateand so on)./debate-evidence-verificationmerges into/debate-evidence-finder, because checking a source is part of finding evidence. The survivor now has a full verification checklist.Survivors I deepened
The seven thin survivors get entries in
scripts/seo_guides.pythat combine what each merged page said. They also describe the tools as they exist in the app: the timer's four presets (Standard 4-6-6-3, LD, PF, Policy) and its signals, the flowchart's node and link types, Crossfire's modes and opponent styles, Factoids and the Library. I checked each product claim againstsrc/. The old timer copy promised prep timers and format presets the app doesn't have; the new copy says what is missing.Visible characters, measured as text outside
<head>, scripts and styles:/online-debate-timer/argument-flowchart/how-to-weigh-in-debate/how-to-cross-examine-in-debate/how-to-flow-in-debate/world-schools-debate/debate-evidence-finder/how-to-practice-rebuttals/best-ai-debate-tools/how-to-practice-rebuttalsgains a short "shape of a rebuttal speech" section (select, attack the warrant, extend, frame the ballot), the one thing/how-to-write-a-rebuttal-speechhad that it lacked./best-ai-debate-toolsgains an FAQ on alternatives./ai-debate-case-generatorneeded nothing from the page it absorbed. The new copy names the product with{product}. Each deepened guide's FAQ list feeds both the visible FAQ and the FAQPage JSON-LD; I checked that they match on all nine pages.What else changed
modifieddate. Only the nine deepened pages movedateModifiedand sitemaplastmodto 2026-10-20. Every other page keeps 2026-10-19./ai-debate-case-generatortakes the retired/debate-case-generator's place inPAGESand in the guide nav, so it keeps the sitewide links that page had. Removing 13 pages shifts the position-based "Related guides" block on every page. On the other 27 guides, I diffed the<head>(title, description, canonical, JSON-LD) and body againstmain: they are identical apart from the nav and related-links blocks.llms.txtandhumans.txtnow point at/ai-debate-case-generator.src/test/vercel-deployment-config.test.tslimits the brand-redirect assertion to the brand rules. A new check pins the 13 expected redirects and fails if one is dropped or changed, if a survivor page is missing, if a retired page's folder is left inpublic/, or if any page links to a retired slug. I confirmed it fails for a dropped redirect, a leftover folder and a stale related link.docs/operations.mddescribes the guide redirects, the per-page date and how to retire a guide.Left alone
/debate-rebuttal-practiceand/how-to-practice-rebuttalsare the closest remaining pair. Both are deep and were written on purpose in Give five guide pages their own content and one brand config #152 and Give six more guide pages their own content #154. The first covers rebuttal practice with the Attack analyzer, and the second is a weekly training plan with drills. I kept both, but they share material (the five ways to answer an argument, per-format notes) and are the next candidates if Search Console shows them competing.scripts/gsc_submit.pystill lists/debate-case-generator,/debate-weighing-guideand/wsdc-debate-practice. It is an ops submission list that already includes the brand-redirect URLs on purpose, so I did not change it./app, the legal pages andplan/rebrand-rebuttlare untouched.Checks
GitHub Actions can't run on this account right now (billing), so these are local results at this branch's head, not CI:
npm run docs:check,npm run lint,npm run typecheck: pass.npm test: 37 files, 305 tests pass.npm run build: passes.sitemap: 39 URLs, 39 with lastmod.npm run verify: passes, including the service worker check and 30 desktop Chromium@smoketests.Preview proof at
9be85b6(the last commit that touchedvercel.json),curlwith the bypass header:301withlocationset to the survivor in the table. Each/<slug>/ends on the survivor with200./online-debate-timer,/how-to-weigh-in-debate,/world-schools-debate,/debate-evidence-finder,/ai-debate-case-generatorand/best-ai-debate-toolsreturn200./sitemap.xmllists 39 URLs and none of the retired slugs./debate-impact-calculuslands on/how-to-weigh-in-debatewith the new sections and FAQs, and/wsdc-debate-practice/lands on/world-schools-debate, with no console errors.Review
CodeRabbit was rate-limited and Copilot was out of quota. A Codex review of
eea9607found five low-severity issues, all fixed inde84234:vercel.json, so deleting a rule also deleted its check.The wrong "turn on web research" claim also appears three times on
/ai-debate-case-generator, written in #152. That page is outside this PR, so it needs a follow-up fix.Not proven: production behaviour (nothing deployed) and whether Google indexes more pages after this, which only Search Console can show over the coming weeks.
🤖 Generated with Claude Code