Skip to content

SEO/AEO: DebateOwl entity, icons on every page, speech-times and comparison tables - #249

Merged
Programcode merged 2 commits into
mainfrom
seo/debateowl-brand-aeo
Oct 27, 2026
Merged

Programcode merged 2 commits into
mainfrom
seo/debateowl-brand-aeo

Conversation

@Programcode

@Programcode Programcode commented Oct 27, 2026 •

Copy link
Copy Markdown
Owner

Implements P1, P2 and the quick wins from the DebateOwl SEO/AEO brief (2026-10-27).

Entity

  • Home Organization is now DebateOwl (@id …/#organization, alternateName "Debate Owl", 512×512 ImageObject logo, description with "formerly DebateLab", sameAs SaaSHub + Uneed) with Pi-Stack as parentOrganization, not the name or a sameAs.
  • WebSite.alternateName = ["Debate Owl", "debateowl.com"], inLanguage en/hu/es; SoftwareApplication.alternateName "Debate Owl".
  • <meta name="author" content="DebateOwl"> on the app shell and every guide page.
  • Guide Article author/publisher is the DebateOwl Organization with its logo; no "Pi-Stack" left on any guide page.

Icons: guide pages had no icon links; they now carry favicon.ico 48, favicon.png 48, icon-192 192 and apple-touch-icon 180. The shell gains the 192px link.

Content

  • /online-debate-timer: speech-times-by-format table generated from src/lib/free-tools/formats.ts (the free timer's configs and their cited NSDA/WUDC/WSDC/UADC sources), so the two can't disagree. No speech times typed by hand.
  • Comparison tables on /debateowl-vs-chatgpt, /debateowl-vs-windebate, /debateowl-vs-debateclub, built only from claims already on those pages. A "draft vs finished case" table on /ai-debate-case-generator.
  • The case-generator and coach answers open by naming DebateOwl. Definitions (<dl id="definition"> + DefinedTerm) and new FAQs on those two pages and on the timer page.
  • "DebateOwl, formerly DebateLab." in the footer (en/hu/es); llms.txt notes the old name and host.
  • Bingbot added to the robots AI group.

Guards: check-site now fails on an Organization not named for the product or missing its logo/parent, on a parent listed in sameAs, and on any indexed page without the icon links or the DebateOwl author. src/test/seo/brand-entity.test.ts pins the timer table to FORMATS.

Verify: npm run verify passes locally (CI is blocked by billing): 94 test files, check-site 55 HTML files, no problems; check-links no problems; 47/47 e2e smoke tests.

Not in this PR: GSC reindex and Bing Webmaster Tools (not code). The http://debate.pi-stack.org → https 308 hop is Vercel's edge, which vercel.json can't change.

Summary by CodeRabbit

  • Content Updates
    • Expanded debate guides with definitions, worked examples, comparison tables, and additional FAQs on coaching, case generation, pricing, judging, and debate formats.
    • Added a detailed debate-format timing table and links to the free timer.
  • Branding
    • Updated guide bylines and About sections to credit DebateOwl, and added a footer note that it was formerly DebateLab.
  • Accessibility
    • Added browser and app icon links across the site.

…comparison tables

- Organization JSON-LD is DebateOwl (logo 512, sameAs, Pi-Stack as parentOrganization); meta author DebateOwl
- WebSite/SoftwareApplication alternateName "Debate Owl"; WebSite inLanguage en/hu/es
- Guide pages get favicon/192/apple-touch icon links, meta author, byline and a DebateOwl home link
- /online-debate-timer: speech-times table generated from src/lib/free-tools/formats.ts
- Tables on /debateowl-vs-chatgpt, vs-windebate, vs-debateclub and the case generator
- Case generator and coach answers open with DebateOwl; definitions + DefinedTerm, new FAQs
- 'Formerly DebateLab' in the footer and llms.txt; Bingbot in robots AI group
- check-site enforces the entity and icon links; tests pin the timer table to the formats
Copilot AI balanced review requested due to automatic review settings October 27, 2026 16:44

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.

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

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 49 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 5beb16a and d81a011.

Files selected for processing: 33
  • index.html
  • public/ai-debate-case-generator/index.html
  • public/ai-debate-coach/index.html
  • public/ai-debate-practice/index.html
  • public/ai-rebuttal-generator/index.html
  • public/argument-flowchart/index.html
  • public/best-ai-debate-tools/index.html
  • public/british-parliamentary-debate/index.html
  • public/congress-debate/index.html
  • public/debate-clash-points/index.html
  • public/debate-evidence-finder/index.html
  • public/debate-fallacies/index.html
  • public/debate-judge-adaptation/index.html
  • public/debate-motion-analysis/index.html
  • public/debate-rebuttal-practice/index.html
  • public/debate-speech-structure/index.html
  • public/debate-topics-for-students/index.html
  • public/debateowl-pricing/index.html
  • public/debateowl-vs-chatgpt/index.html
  • public/debateowl-vs-debateclub/index.html
  • public/debateowl-vs-windebate/index.html
  • public/how-to-cross-examine-in-debate/index.html
  • public/how-to-flow-in-debate/index.html
  • public/how-to-practice-rebuttals/index.html
  • public/how-to-prepare-for-a-debate-tournament/index.html
  • public/how-to-weigh-in-debate/index.html
  • public/how-to-write-a-debate-case/index.html
  • public/lincoln-douglas-debate/index.html
  • public/online-debate-timer/index.html
  • public/policy-debate/index.html
  • public/public-forum-debate/index.html
  • public/world-schools-debate/index.html
  • scripts/generate_seo_content.py
Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between dba5219 and 5beb16a.

Files selected for processing: 49
  • docs/operations.md
  • index.html
  • public/ai-debate-case-generator/index.html
  • public/ai-debate-coach/index.html
  • public/ai-debate-practice/index.html
  • public/ai-rebuttal-generator/index.html
  • public/argument-flowchart/index.html
  • public/best-ai-debate-tools/index.html
  • public/british-parliamentary-debate/index.html
  • public/congress-debate/index.html
  • public/debate-clash-points/index.html
  • public/debate-evidence-finder/index.html
  • public/debate-fallacies/index.html
  • public/debate-judge-adaptation/index.html
  • public/debate-motion-analysis/index.html
  • public/debate-rebuttal-practice/index.html
  • public/debate-speech-structure/index.html
  • public/debate-topics-for-students/index.html
  • public/debateowl-pricing/index.html
  • public/debateowl-vs-chatgpt/index.html
  • public/debateowl-vs-debateclub/index.html
  • public/debateowl-vs-windebate/index.html
  • public/how-to-cross-examine-in-debate/index.html
  • public/how-to-flow-in-debate/index.html
  • public/how-to-practice-rebuttals/index.html
  • public/how-to-prepare-for-a-debate-tournament/index.html
  • public/how-to-weigh-in-debate/index.html
  • public/how-to-write-a-debate-case/index.html
  • public/lincoln-douglas-debate/index.html
  • public/llms.txt
  • public/online-debate-timer/index.html
  • public/policy-debate/index.html
  • public/public-forum-debate/index.html
  • public/robots.txt
  • public/world-schools-debate/index.html
  • scripts/check-site.mjs
  • scripts/generate_seo_content.py
  • scripts/seo_answers.py
  • scripts/seo_guides.py
  • src/components/landing/Footer.tsx
  • src/config/site.json
  • src/lib/seo/pages.ts
  • src/lib/seo/tool-pages.ts
  • src/locales/en.json
  • src/locales/es.json
  • src/locales/hu.json
  • src/locales/tools/en.json
  • src/prerender/entry.tsx
  • src/test/seo/brand-entity.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Walkthrough

The change updates DebateOwl identity data across site metadata, structured data, and generated guides. It extends guide generation with definition and timer-derived speech-time blocks, revises several guide pages, and adds former-name references to site content.

Changes: DebateOwl identity and guide generation

Layer / File(s) Summary
Configure and validate site identity
src/config/site.json, src/lib/seo/pages.ts, src/prerender/entry.tsx, scripts/check-site.mjs, src/test/seo/brand-entity.test.ts
The configuration now stores structured DebateOwl organization data and the former identity. Prerendering uses the shared Organization node, and site checks and tests validate the identity and guide metadata.
Apply DebateOwl identity to guide pages
index.html, public/*/index.html
The homepage and generated guide pages update author, icon, and structured-data metadata. Many pages add a DebateOwl team byline or link the product name to the homepage.
Generate definitions and speech-time tables
scripts/generate_seo_content.py, docs/operations.md, scripts/seo_guides.py, src/test/seo/brand-entity.test.ts
The generator supports definition blocks and builds speech-time tables from timer format data. The timer guide uses generated data, and tests compare its contents with the built-in formats.
Revise guide content and former-name references
scripts/seo_guides.py, scripts/seo_answers.py, public/ai-debate-case-generator/index.html, public/ai-debate-coach/index.html, public/online-debate-timer/index.html, public/debateowl-vs-*/index.html, src/components/landing/Footer.tsx, src/locales/*, public/llms.txt, public/robots.txt
Several guides add definitions, FAQs, worked examples, or comparison tables. The footer and site description identify DebateLab as the former name. The named crawler group adds Bingbot.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Formats as formats.ts
  participant Table as speech_times_table()
  participant Renderer as render_block()
  participant Guide as generated timer guide
  Formats->>Table: format and segment data
  Table->>Renderer: speech-times table
  Renderer->>Guide: rendered guide block
Loading
  • 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 merged commit fea1ab9 into main Oct 27, 2026
3 of 10 checks passed
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