Skip to content

fix(worker): retire the duplicate www host that still feeds Google the 'TinyStudio Agent Desk' name - #181

Merged
nish3451 merged 25 commits into
mainfrom
docs/agent-desk-index-reverify-lane1-20260814
Aug 14, 2026
Merged

fix(worker): retire the duplicate www host that still feeds Google the 'TinyStudio Agent Desk' name#181
nish3451 merged 25 commits into
mainfrom
docs/agent-desk-index-reverify-lane1-20260814

Conversation

@nish3451

@nish3451 nish3451 commented Aug 14, 2026

Copy link
Copy Markdown
Collaborator

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.io measurement (2026-08-14, browser) returns https://tinystudio.io/ titled "TinyStudio — The Website Appraisal". The reported title ("tinystudio.io - TinyStudio Agent Desk", q5 evidence 2026-08-06) is gone. The noindex, nofollow + retired-framing fix from PR #46 is present on head and on live, and its check-site.mjs guard still holds.

Still live: the same SERP still shows the retired name — on a host nobody had closed.

Indexed URL Title Google presents
https://tinystudio.io/ TinyStudio — The Website Appraisal ✅
http://www.tinystudio.io/agents TinyStudio — The Desk - TinyStudio Agent Desk
http://www.tinystudio.io/pricing.html Pricing & terms — The Tiny Studio
http://www.tinystudio.io/specimen.html The Website Appraisal — specimen — The Tiny Studio

The trailing "- TinyStudio Agent Desk" is Google's cached site name for the host, not a page title. www.tinystudio.io is 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.jsonc routes www.tinystudio.io/* at this worker, but the host dispatch only special-cased app. and api.. www fell through to the public-site handler, so the site answered 200 on a second hostname, over plain http too.

  • http://www.tinystudio.io/200 OK, no redirect, no HTTPS upgrade
  • https://www.tinystudio.io/200, byte-identical to the apex (sha256 b37b0bbe…934e both)

robots.txt, sitemap.xml, every canonical and every og:url already name https://tinystudio.io as 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.io301https://tinystudio.io, path and query preserved, plain http upgraded 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 stub ASSETS that would return page HTML); and the apex + retired app./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.mjs80 pass, 0 fail (76 before).
  • Full suite green: headings 6 · sitemap 7 · UI 16 · contract 8 · viewport 4 · narrow-pages · render-blocking.
  • Regression proof: disabling the host check (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

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

    • Added permanent HTTPS redirects from www.tinystudio.io to the canonical apex domain while preserving paths and query parameters.
    • Retired hosts continue returning appropriate 410 responses.
  • Bug Fixes

    • Prevented duplicate site content from being served on the www hostname.
    • Added security headers to canonical-host redirects.
  • Documentation

    • Added verification records covering canonical redirects, retired-host behavior, test results, and remaining indexing issues.

lane1 agent added 2 commits August 14, 2026 11:20
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.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@coderabbitai

coderabbitai Bot commented Aug 14, 2026

Copy link
Copy Markdown

Review Change Stack

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: 9ca1f3fc-4e62-4686-8956-fb4b7828d4a3

📥 Commits

Reviewing files that changed from the base of the PR and between 5770bf3 and ee363d3.

📒 Files selected for processing (4)
  • .lane/reports/docs/agent-desk-index-reverify-lane1-20260814.md
  • docs/evidence/agent-desk-index-reverify-2026-08-14.md
  • scripts/test-agent-worker.mjs
  • src/worker.js

📝 Walkthrough

Walkthrough

The worker now redirects www.tinystudio.io to the apex HTTPS host with a permanent redirect. Tests verify URL preservation and existing host behavior. Documentation records verification results and remaining indexing issues.

Changes

Canonical host handling

Layer / File(s) Summary
Canonical redirect implementation
src/worker.js
Requests to www.tinystudio.io receive a 301 HTTPS redirect to tinystudio.io. Paths and queries are preserved, and the port is removed.
Redirect behavior tests
scripts/test-agent-worker.mjs
Tests cover redirect status, HTTPS upgrade, URL preservation, duplicate-content prevention, and unchanged apex and retired-host responses.
Verification evidence
docs/evidence/agent-desk-index-reverify-2026-08-14.md, .lane/reports/docs/agent-desk-index-reverify-lane1-20260814.md
Records verification results, evidence references, remaining canonical and HTTP issues, and the scope of the fix.

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

Merge Risk: ⚪ Minimal · up to ee363

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 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 Pro by visiting https://app.coderabbit.ai/login.

Comment @coderabbitai help to get the list of available commands.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@greptile-apps greptile-apps Bot 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.

Your trial has ended. Reactivate Greptile to resume code reviews.

@nish3451
nish3451 merged commit 05efed1 into main Aug 14, 2026
3 checks passed
nish3451 added a commit that referenced this pull request Aug 17, 2026
… 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>
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.

1 participant