Repository navigation
Clean up how DebateOwl shows in search results - #251
Conversation
Titles follow "Page name | DebateOwl" on every indexable page in English, Hungarian and Spanish, and the home page is "DebateOwl: AI debate prep and practice". Each meta description is one sentence saying what the page does; the free tool pages lead with "Free" and no longer call DebateOwl a paid app. og: and twitter: tags carry the same strings, and the static guides gain the twitter title and description they lacked. The guides' heads now live only in PAGES in generate_seo_content.py. The logo and name link to the home page in the page's own language and are labelled "DebateOwl home". Terms, privacy and sources get a BreadcrumbList like the guides and tool pages already have. The favicon gets a simplified small-size owl (flat colours, bigger eyes, no tile) for the 16, 32 and 48 px frames; its source is src/assets/owl/owl-favicon.svg. Every landing trial button says "Start free trial" (hu "Ingyenes próba indítása", es "Comenzar prueba gratis"), matching the pricing card. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
| Layer / File(s) | Summary |
|---|---|
Localized calls to action and home links src/locales/*, src/components/landing/*, src/components/free-tools/ToolPageLayout.tsx, src/components/layout/PublicPageShell.tsx, src/pages/tools/*, e2e/loading-performance.spec.ts |
Updates trial CTA text and DebateOwl home-link labels in localized content. The landing-page navbar and footer use the current language for the home route. Tools-page descriptions change to identify DebateOwl as an AI debate preparation and practice app. The CTA test selects “Start free trial.” |
SEO metadata generation scripts/generate_seo_content.py, scripts/seo_guides.py |
Revises SEO copy in the generator and adds a trial-length substitution and Twitter title and description metadata. Removes title and description fields from ten guide entries. |
Published page SEO metadata index.html, public/*/index.html, public/llms.txt |
Revises titles and descriptions across page, Open Graph, Twitter, and structured metadata. Updates accessible labels on multiple brand links and revises multilingual and English page descriptions. |
Legal and sources structured data src/prerender/entry.tsx |
Adds breadcrumbs to terms and privacy structured data. Adds web-page structured data and breadcrumbs for the sources page. |
Hosting reference
| Layer / File(s) | Summary |
|---|---|
Vercel domain redirect reference docs/operations.md |
Documents that www.debateowl.com redirects to the apex domain through Vercel’s Domains setting while preserving the path and query. |
Estimated code review effort: 3 (Moderate) | ~25 minutes
- 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.
Makes DebateOwl look cleaner in Google results and AI answers: shorter titles in a consistent form, one-sentence descriptions, a favicon you can still read at 16px, brand links that go back to the home page, and the same trial button text everywhere.
www redirect: a Vercel setting, no code change
https://www.debateowl.comalready redirects to the apex on every path and keeps the query string. I checked it live with curl:The redirect comes from the
debate-navigatorproject's Domains list (www.debateowl.com→debateowl.com, status 308), not fromvercel.json. A host rule invercel.jsonwould never run, because the domain redirect fires first. Google treats 308 the same as 301, and every page already names its apex canonical URL, so www should drop out of results as Google recrawls. That happens with time, not with a different status code.If you want a literal 301 anyway, it's a dashboard change and I haven't made it: Vercel →
debate-navigator→ Settings → Domains →www.debateowl.com→ Edit → keep "Redirect to debateowl.com" and set the status to 301 Moved Permanently. To nudge Google afterwards, request indexing forhttps://debateowl.com/in Search Console. docs/operations.md now says where the redirect lives.Titles and descriptions
index.html) gets the new home strings too.PAGESinscripts/generate_seo_content.py. The 10 overrides inseo_guides.pyare removed, and the pages are regenerated.nameanddescriptionfields on WebPage, Article and WebApplication follow the head strings automatically. I didn't touch Organization, WebSite, msvalidate, canonical or hreflang.Links back to the home page
/,/hu,/es) and are labelled "DebateOwl home" ("DebateOwl főoldal", "Inicio de DebateOwl"). Before, the landing nav and footer on /hu and /es pointed at the English/.https://debateowl.com/. Terms, privacy and sources had no breadcrumb, so they now get a BreadcrumbList (DebateOwl → page). I didn't add a visible breadcrumb there: their header is already a one-click link home.Favicon
favicon.icowas already square with 16, 32 and 48px frames, andfavicon.pngwas 48×48, so the size rules were met. At 16px, though, the owl was a blur: the pale tile, the glasses-style eye rings and the gradients turned to mush. Google also shows a downscaled 48px icon, which had the same problem. I drew a simplified version of the same owl for those three sizes: flat brand blue, the same ears and silhouette, bigger white eyes with dark pupils, the orange beak and the light belly, on a transparent background. The 72px and larger icons keep the full mark, which reads fine at those sizes. The source issrc/assets/owl/owl-favicon.svg. Browsers cache the icons for 30 days, so returning visitors will see the new one gradually.Trial buttons
The hero, nav (desktop and mobile) and final landing buttons say "Start free trial", with hu "Ingyenes próba indítása" and es "Comenzar prueba gratis", matching the pricing card. The final button used to say "Launch DebateOwl".
e2e/loading-performance.spec.tsnow clicks "Start free trial".Verification
GitHub Actions is billing-blocked, so these are local results at the head commit:
npm run verifypasses atce9ce55c(exit 0): docs check, lint (eslint, knip, repo rules), typecheck, 690 unit tests, 30 collaboration tests, 483 Edge Function tests, build with check-site and check-links, service-worker test, and 47/47 desktop Chromium@smokee2e tests.Outside the smoke set, I ran
e2e/loading-performance.spec.ts,e2e/localization.spec.tsande2e/free-tools.spec.tson desktop Chromium: 21 passed and 2 failed. The landing CTA test with the new "Start free trial" text passes. The 2 failures (loading-performance.spec.ts:63, alocator('header')strict-mode hit in the signed-in app;localization.spec.ts:102, which looks for a level-1 "404" heading the not-found page no longer has) fail the same way onmainat 69cf666, so this PR didn't cause them.npm run build: prerender, sitemap,check-site(55 HTML files, no problems) andcheck-linkspass. I checked the built HTML for 16 main pages: each title and description is in sync across the four tags, each subpage has a BreadcrumbList, and each brand link carries the right label and locale.Hero, nav, pricing and final buttons in the built
/,/huand/esshow the new text.Not checked: production, where nothing is deployed, and how Google actually renders the favicon. The render above is a mock-up of the result row.
🤖 Generated with Claude Code
Summary by CodeRabbit