01-projects/printables-product/reviews

growth seo geo

·studio-review·status: open
printablesscribble-worksgrowthseogeo

2026-09-10 growth/SEO/GEO review

Reviewed: live production (curl on https://scribble-works.pages.dev/, /robots.txt, /sitemap.xml, /llms.txt, /game/big-bigger-biggest/, /browse/, and a fabricated non-existent path); src/pages/{index,browse,game/[slug]}.astro, public/ (no robots.txt/sitemap.xml/404.astro found in repo); ~/.claude/state/studio/queue.md:224 (JSON-LD+policy item) and 2026-09-02-commerce-agents-takeaways reference; gh pr list --repo RayDataCo/scribble-works --state merged --limit 150 (130 merged PRs, grepped for sitemap/robots/seo/meta/schema/og/canonical/geo — 0 SEO-specific PRs ever merged).

Findings

  1. No robots.txt, no sitemap.xml, no real 404. All three requested URLs, and a made-up nonexistent path, return HTTP 200 with byte-identical homepage SPA-shell HTML (confirmed via cmp). No 404.astro or public/robots.txt/public/sitemap.xml exist in the repo — every unmatched route soft-404s as the homepage. This wastes crawl budget and gives crawlers no signal about what's real.
  2. Per-page metadata is actually good where routes exist. /game/<slug>/ and /browse/ both render unique <title> and <meta name="description"> server-side (verified on big-bigger-biggest). Not a gap — the earlier "no meta" impression from probing /library/games/... (wrong, nonexistent path) was itself the soft-404 problem in #1.
  3. Zero structured data, zero canonical, zero Open Graph/Twitter tags anywhere checked (home, game detail, browse).
  4. queue.md:224's JSON-LD + policy-page item is still un-started, still explicitly gated ("Founder-read pending; do not start until he nods") — confirmed live: no ld+json on any checked page. No change to its status; not re-prioritized without his read.
  5. Internal linking is solid: /browse/ links to 34 distinct game pages.
  6. 0/130 merged PRs matched SEO/sitemap/robots/schema keywords in title or description — never framed as SEO work; #2's meta tags shipped as ordinary template code. Structured data, robots.txt, sitemap.xml still don't exist.

Proposed queue.md diff (engineering-lane, reversible, autonomous per charter §2 — branch+PR/preview only, no production):

+ [engineering, S, NEW 2026-09-10] robots.txt + sitemap.xml + 404.astro: real files/route so unmatched
+ paths return actual 404s instead of the homepage soft-404 (confirmed live via curl); sitemap lists
+ all live /game/<slug>/ + top-level pages. Small, no product judgment required.

Bear case: shipping a sitemap before the domain migration risks the opposite of decision 1's caution — a sitemap actively invites crawlers to the throwaway .pages.dev URL rather than just failing to block them, which is a stronger version of the same indexing-authority risk than a bare robots.txt policy choice alone.

Falsification: queue.md item 8 migrates the domain off .pages.dev; if that lands first, indexing decisions made now are moot.

Decisions needed (founder)

  1. robots.txt policy on the pages.dev domain: allow indexing now, or Disallow: / until the custom domain (scribbleworks.rdco.dev / eventual .com) lands per queue.md item 8 ("Production-time cleanup... DNS... r2.dev→custom domain")? Indexing the throwaway .pages.dev URL now risks that URL, not the real one, accumulating the search authority described in the charter's naming section (§5) as "expensive to reverse."
  2. JSON-LD/policy-page item (queue.md:224) remains parked on his read of 2026-09-02-commerce-agents-takeaways — flagging as still open, not re-litigated here.

Correction 2026-09-19 (verified in code, main @ 222bf3a): this note's "no robots.txt / sitemap / 404 / JSON-LD / canonical" findings are STALE. Shipped since: src/lib/robots.js (board #147, 2026-09-14: production allow, /account /api /sign-in /create-account /packs disallowed, *.pages.dev disallow-all), src/pages/sitemap.xml.ts, 404.astro, src/lib/seo.js (gameJsonLd/homeJsonLd, SW-R15 #198), and scribbleworks.co attached. The robots allow-vs-disallow decision is resolved and is not a blocker. Do not cite this note's gap list as current.