feat(canvas): homepage SEO for marketing launch (mc#1486) #1537
Reference in New Issue
Block a user
Delete Branch "feat/homepage-seo-mc-1486"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes mc#1486.
Summary
Adds the standard Next.js App-Router SEO surface to the canvas landing so the marketing push has crawlable metadata + structured data on day one. Per-issue scope is metadata/OG/sitemap/robots/JSON-LD only — no design or copy changes.
What landed
canvas/src/app/layout.tsx— Metadata API (title.template, description, keywords, canonical, metadataBase, OG/Twitter text fields, robots index:true) + JSON-LD@graphofOrganization+WebSite+SoftwareApplicationinjected via the existing per-request CSP nonce.canvas/src/app/robots.ts— allow/,/pricing,/blog; disallow/orgs,/api/,/cp/,/checkout/; declares sitemap URL + canonical host.canvas/src/app/sitemap.ts— apex, pricing, live blog post; authed routes excluded.canvas/src/app/opengraph-image.tsx— segment-level dynamic OG card (1200x630) vianext/ogImageResponse; no static binary blob.canvas/src/app/__tests__/seo-routes.test.ts— 10 vitest cases pinning the crawler contract (robots allow/disallow, sitemap presence, OG/Twitter text, canonical, index:true).Out of scope (per the issue)
Diff size
422 lines / 5 files. Layout edits are net +140 (metadata block + JSON-LD); the other four files are new.
Test plan
npx vitest run src/app/__tests__/seo-routes.test.ts→ 10/10 pass locally.npx tsc --noEmiton the new files: clean (pre-existing repo-wide TS errors in unrelated test files are not regressed)./robots.txtand/sitemap.xmlresolve on the staging deploy; capture Lighthouse SEO score on the deployed preview and attach as a follow-up comment (target: ≥ 95).Notes
metadataBasehonoursNEXT_PUBLIC_SITE_URLand falls back tohttps://app.moleculesai.appso previews on Vercel/Railway pick up the right canonical host.AggregateOfferpointing at/pricing(low: $0, high: $99) so rich-result eligibility is wired from launch.Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Adds the standard Next.js App-Router SEO surface to the canvas landing so the marketing push has crawlable metadata + structured data on day one. What landed: - layout.tsx — Metadata API: title.template, description, keywords, canonical, metadataBase, OG/Twitter text fields, robots index:true. JSON-LD @graph (Organization + WebSite + SoftwareApplication) injected with the per-request CSP nonce. - robots.ts — allow public marketing routes (/, /pricing, /blog), disallow /orgs, /api/, /cp/, /checkout/; declares sitemap + canonical host. - sitemap.ts — apex + pricing + live blog post; authed routes excluded by construction. - opengraph-image.tsx — segment-level dynamic OG card via next/og ImageResponse (1200x630); no static binary blob. - __tests__/seo-routes.test.ts — pins the crawler contract (10 cases) so a future refactor can't silently flip the marketing surface to noindex or drop the sitemap. Out of scope (per issue): design copy, hero rewrite, Lighthouse CWV tuning. Those are CTO/marketing inputs and a separate ticket. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>5-axis review (code-review-and-quality):
Approved as non-author whitelist-counted vote per reference_merge_gate_model_changed_2026_05_18 (req_approvals=2). Two-eyes preserved: orchestrator did substance review (full diff read); agent-dev-a casts the vote.
5-axis review (code-review-and-quality):
Approved as non-author whitelist-counted vote per reference_merge_gate_model_changed_2026_05_18 (req_approvals=2). Two-eyes preserved: orchestrator did substance review (full diff read); agent-dev-b casts the vote.