Skip to content

fix(website): SEO, noindex, canonical, nosnippet & more - #1269

Merged
BlankParticle merged 3 commits into
mainfrom
claude/google-indexing-escaped-chars-68e3b0
Sep 1, 2026
Merged

BlankParticle merged 3 commits into
mainfrom
claude/google-indexing-escaped-chars-68e3b0

Conversation

@sam-goodwin

@sam-goodwin sam-goodwin commented Aug 20, 2026

Copy link
Copy Markdown
Contributor

SEO pass. Google Search Console has been surfacing non-content (terminal chrome, the copy-for-agent prompt, raw .md mirrors, mirror hosts) as results and snippets.

One indexable origin

https://alchemy.run is canonical. Every other host the worker answers on — main.alchemy.run, PR previews, future aliases — is a mirror:

// src/worker.ts — on any non-canonical host
X-Robots-Tag: noindex            // every response
<link rel="canonical">           // left pointing at https://alchemy.run (no longer rewritten)
robots.txt                       // Allow: /, no Sitemap: line
og:url / og:image / twitter:image // still rewritten so previews unfurl themselves

Before this, main.alchemy.run/getting-started/ declared itself canonical and was fully indexable.

robots.txt + markdown mirrors

alchemy.run/robots.txt was serving only Cloudflare's content-signals block — no Sitemap:. Now website/public/robots.txt advertises the sitemap.

.md mirrors (/getting-started.md, Accept: text/markdown) and llms*.txt get X-Robots-Tag: noindex — crawlable so the directive is seen, out of the index. DuckDuckGo/Google were listing alchemy.run/guides/cloudflare.md with import { Tabs, TabItem } from '@astrojs/starlight/components'; as the snippet.

v1-era URLs

/docs/getting-started, /docs/providers/aws-control/…, /guides/cloudflare are still indexed and 404 on prod. On a prod 404 under /docs/, /guides/, /providers/, /concepts/ the worker HEADs v1.alchemy.run and 301s there when it has the page.

data-nosnippet

On every simulated terminal / browser / diagram island on the homepage, the docs Terminal, DAG, LoopDiagram figures, and both SSR'd copies of the 2.8 KB copy-for-agent prompt. Live snippet before: Learn more →. ‹›↻. ○localhost:1337/ HMR. ~/my-appDEV.

Generated reference pages are noindex, follow

/providers/** is 4,070 of the site's 4,412 pages (AWS alone 3,584), each a one-paragraph summary plus one snippet. Indexed individually they read as programmatic thin content and are what surfaces as "random" results instead of the hub/guide pages. The generator now emits:

head:
  - tag: meta
    attrs: { name: robots, content: "noindex, follow" }

Still navigable, still crawled (follow), still in Pagefind. follow keeps link equity flowing to the hub pages. Lifting it later is one line in scripts/generate-api-reference.ts.

The sitemap no longer needs a hand-maintained exclusion list: a collectNoindexPages integration scans the build output for a noindex robots meta and the sitemap filter drops those URLs — covers the reference pages and /auth/* alike.

Structured data

Organization (sameAs → GitHub, X, Discord, npm) + WebSite JSON-LD and twitter:site on every page (src/components/StructuredData.astro).

Also

  • /auth/* pages noindex, follow and out of the sitemap
  • blog pagination pages (/blog/2/…) out of the sitemap
  • homepage description 254 → 154 chars

🤖 Generated with Claude Code

@sam-goodwin sam-goodwin added the deploy-website Deploy the website preview for this PR label Aug 20, 2026
@alchemy-version-bot

Copy link
Copy Markdown
Contributor

Website Preview Deployed

URL: https://alchemyeffectwebsite-website-pr-1269-6v4i3nu2hxiftalm.testing-2b2.workers.dev

Built from commit b8512c5.


This comment updates automatically with each push.

@sam-goodwin

Copy link
Copy Markdown
Contributor Author

@BlankParticle did you have a chance to look at this? We need to fix the SEO issue on google

@BlankParticle

Copy link
Copy Markdown
Member

i forgot, will take a look

@BlankParticle
BlankParticle force-pushed the claude/google-indexing-escaped-chars-68e3b0 branch from b8512c5 to 876288e Compare August 26, 2026 15:41
@BlankParticle BlankParticle changed the title fix(website): serve robots.txt, keep markdown mirrors out of the index fix(website): SEO pass — noindex mirrors, canonical on alchemy.run, nosnippet decorations, sameAs JSON-LD Aug 26, 2026
@BlankParticle
BlankParticle marked this pull request as ready for review August 26, 2026 15:42
@BlankParticle BlankParticle added deploy-website Deploy the website preview for this PR and removed deploy-website Deploy the website preview for this PR labels Aug 26, 2026
@BlankParticle
BlankParticle force-pushed the claude/google-indexing-escaped-chars-68e3b0 branch 2 times, most recently from 6f02ec4 to 3b2a244 Compare September 1, 2026 10:34
@BlankParticle BlankParticle changed the title fix(website): SEO pass — noindex mirrors, canonical on alchemy.run, nosnippet decorations, sameAs JSON-LD fix(website): SEO, noindex, canonical, nosnippet & more Sep 1, 2026
@alchemy-version-bot

alchemy-version-bot Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Website Preview Deployed

URL: https://pr-1269-alchemyeffectwebsite-website-pjklbtzujol4cpasllfbla6qj.testing-2b2.workers.dev

Built from commit 403c635.


This comment updates automatically with each push.

sam-goodwin and others added 3 commits September 1, 2026 16:59
`alchemy.run/robots.txt` was Cloudflare's content-signals comment block and
nothing else — no `User-agent`, no `Allow`, and no `Sitemap:`, so the
4,206-URL sitemap was never advertised to crawlers.

Google was also synthesizing the homepage snippet instead of using our meta
description (254 chars against a ~155 budget), stitching it together with
decorative terminal chrome from the marketing islands.

- add `public/robots.txt` with the sitemap reference
- `X-Robots-Tag: noindex` on the agent-facing `.md` mirrors and `llms.txt`;
  `alchemy.run/getting-started.md` is indexed today with raw MDX imports as
  its snippet
- fold `robots.txt` into the preview-origin rewrite so PR previews don't
  advertise production's sitemap
- `noindex` the OAuth landing pages and drop `/auth/` from the sitemap
- cut the homepage description to 154 chars
- `data-nosnippet` on the simulated terminal and browser chrome, which
  currently leaks into snippets as `○localhost:1337/ HMR. ~/my-appDEV.`

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…et decorations, sameAs JSON-LD

- every non-canonical host (main.alchemy.run, PR previews) answers with
  X-Robots-Tag: noindex, a sitemap-less robots.txt, and an untouched
  <link rel="canonical"> pointing at https://alchemy.run (og:* still
  rewritten so previews unfurl themselves)
- v1-era URLs (/docs/*, /guides/*, /providers/*, /concepts/*) that 404 on
  prod probe v1.alchemy.run and 301 there instead of dead-ending
- data-nosnippet on every simulated terminal / browser / diagram island,
  the docs Terminal + DAG/Loop figures, and both copies of the
  copy-for-agent prompt
- Organization (sameAs → GitHub, X, Discord, npm) + WebSite JSON-LD and
  twitter:site on every page
- blog pagination pages dropped from the sitemap

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@BlankParticle
BlankParticle force-pushed the claude/google-indexing-escaped-chars-68e3b0 branch from 3b2a244 to 403c635 Compare September 1, 2026 11:29
@BlankParticle
BlankParticle merged commit 09f2a23 into main Sep 1, 2026
4 checks passed
@BlankParticle
BlankParticle deleted the claude/google-indexing-escaped-chars-68e3b0 branch September 1, 2026 11:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deploy-website Deploy the website preview for this PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants