fix(worker): retire the duplicate www host that still feeds Google the 'TinyStudio Agent Desk' name - #181
Conversation
wrangler.jsonc routes www.tinystudio.io/* at this worker, but nothing sent that host anywhere: it answered 200 with a byte-identical copy of the public site, on a second hostname and over plain http. Google therefore holds www.tinystudio.io as a site of its own, and that entity still carries the retired "TinyStudio Agent Desk" site name from when the self-serve desk owned the root - which is why the retired product name still surfaces for this site even though the apex host's title, description and site name are correct. robots.txt, sitemap.xml and every canonical and og:url already name https://tinystudio.io as the single address, so the duplicate host now 301s there, preserving path and query and upgrading plain http. A page-level canonical is only a hint; the 301 is what retires the duplicate site entity along with its stale name. The apex host and the retired app/api hosts are untouched.
…ceipt the www-host fix Re-verifies the shipped noindex/retired-framing fix on head and live, records the 2026-08-14 Google site: measurement showing the apex result is now clean, and documents the residual duplicate www host that kept handing Google the retired site name, with root cause, regression proof and the deliberate non-overlap with open PR #91.
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Free Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe worker now redirects ChangesCanonical host handling
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to The PR adds a localized permanent redirect for the duplicate www host while preserving existing host behavior; no actionable merge-blocking risk remains after normal checks and review. Note 🎁 Summarized by CodeRabbit FreeYour 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 Pro by visiting https://app.coderabbit.ai/login. Comment |
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
There was a problem hiding this comment.
Your trial has ended. Reactivate Greptile to resume code reviews.
… finding on current main and live (2026-08-17) (#236) All code-side paths that fed Google the retired 'TinyStudio Agent Desk' name are closed and live: PR #46 noindex+retired framing on the legacy /agent-desk surface, PR #181 (05efed1) retiring the duplicate www host by 301 to apex, and PR #229 (798cd71, merged today) making the legacy page's canonical/og:url name the clean /agent-desk instead of the apex root. This lane re-verified every surface against origin/main 7d3a8ae and live: apex title/description/canonical current with zero Agent Desk strings, www (http+https, deep paths, query) 301s to apex, /agent-desk serves noindex/nofollow retired framing with self-canonical, app/api 410, and robots/sitemap/llms/offer all correct. npm run check passes, npm test is green (121 tests, 0 failures), git diff --check clean. SERP measurement was attempted but curl fetches are bot-blocked; index refresh is Google's timetable. Closes item f41c8af0f8. Co-authored-by: nish3451 <nish3451@users.noreply.github.com>
Addresses the dogfood finding
f41c8af0f8: "Google still presents the retired self-serve 'TinyStudio Agent Desk' title/snippet for tinystudio.io."What I found
The finding is half closed, half live.
Closed: the apex homepage is fixed. A real Google
site:tinystudio.iomeasurement (2026-08-14, browser) returnshttps://tinystudio.io/titled "TinyStudio — The Website Appraisal". The reported title ("tinystudio.io - TinyStudio Agent Desk", q5 evidence 2026-08-06) is gone. Thenoindex, nofollow+ retired-framing fix from PR #46 is present on head and on live, and itscheck-site.mjsguard still holds.Still live: the same SERP still shows the retired name — on a host nobody had closed.
https://tinystudio.io/http://www.tinystudio.io/agentshttp://www.tinystudio.io/pricing.htmlhttp://www.tinystudio.io/specimen.htmlThe trailing "- TinyStudio Agent Desk" is Google's cached site name for the host, not a page title.
www.tinystudio.iois a separate host entity in the index and its site name is still the retired product's, from when the desk owned the root. The stale "The Tiny Studio" titles PR #98 fixed also survive there.Root cause
wrangler.jsoncrouteswww.tinystudio.io/*at this worker, but the host dispatch only special-casedapp.andapi..wwwfell through to the public-site handler, so the site answered 200 on a second hostname, over plainhttptoo.http://www.tinystudio.io/→200 OK, no redirect, no HTTPS upgradehttps://www.tinystudio.io/→200, byte-identical to the apex (sha256 b37b0bbe…934eboth)robots.txt,sitemap.xml, everycanonicaland everyog:urlalready namehttps://tinystudio.ioas the one address. The duplicate host contradicted all of them, and Google had plainly not taken the canonical hint.Change
src/worker.js— canonical-host redirect ahead of all dispatch:www.tinystudio.io→301→https://tinystudio.io, path and query preserved, plainhttpupgraded in the same hop. A canonical is a hint; the 301 is the directive that collapses the duplicate site entity and its cached stale site name.scripts/test-agent-worker.mjs— 4 guards: the 301 +Location; path/query preservation; www never serving public HTML for/,/audit,/agents,/agent-desk(against a stubASSETSthat would return page HTML); and the apex + retiredapp./api.410 hosts left untouched.docs/evidence/agent-desk-index-reverify-2026-08-14.md— evidence receipt.Verification
node scripts/check-site.mjs→ "TinyStudio.io checks passed."node --test scripts/test-agent-worker.mjs→ 80 pass, 0 fail (76 before).if (false)) fails exactly the three behavioural tests (# pass 77 / # fail 3); restoring returns 80/0. The fourth guard passes either way by design — it asserts the hosts this must not touch.Deliberately not in this PR
/agent-deskcanonical (the other consolidation path for this finding) is already fixed and waiting in open PR fix(seo): stop the retired Agent Desk from claiming the apex root as its canonical #91,MERGEABLEbutBLOCKEDon review. Not duplicated here — this branch does not touchpublic/agent-desk.htmlor thecheck-site.mjsdesk guard, so it will not conflict and the two compose./agentscanonical → covered by open PRs fix(public): point agents, pricing, specimen canonicals, og:url, and JSON-LD WebPage @ids at the clean URLs #142/fix(public): point agents, pricing, specimen canonicals and JSON-LD @ids at the clean URLs #95.http://tinystudio.io/(apex over plain http) also answers 200 — same class, different host, an "Always Use HTTPS"/HSTS concern rather than this finding's mechanism. Flagged in the receipt for its own item.No immediate SERP change is claimed — recrawl and site-name refresh are Google's timetable. What is proven is that the duplicate host, the last surface still handing Google the retired name, no longer exists.
Summary by CodeRabbit
New Features
www.tinystudio.ioto the canonical apex domain while preserving paths and query parameters.Bug Fixes
wwwhostname.Documentation