Repository navigation
feat(seo): structured data + sitemap index - #55
Conversation
- drop opacity-55 dim on the `source` CTA so it matches its siblings at rest - replace letter-spacing jiggle on a.underline-brutal hover with a whisper-green underline + brighter arrow nudge — no layout reflow - rework brutal-rise: 28px translate, 850ms expo-out, restaggered cascade Co-Authored-By: Claude <noreply@anthropic.com>
- replace the single-URL urlset with a sitemap index at /sitemap.xml that points at /sitemap-pages.xml (marketing) and the Mintlify-served https://docs.decdn.org/sitemap.xml so docs URLs are discoverable from the marketing-site sitemap as docs grow - new route handlers use force-static + GET to emit static XML under output: "export"; robots.txt already points at /sitemap.xml so no change needed there Cross-host sitemap entries require both hosts to be verified in Google Search Console for the index references to be honored. Co-Authored-By: Claude <noreply@anthropic.com>
The hover state on .underline-brutal .arrow flips color to whisper-green but the arrow's transition rule only covered `transform`, so the color snapped while the translateX animated. Extend the rule to cover `color` on the same 260ms expoOut curve. Flagged in PR #46 review (Copilot, Gemini). Co-Authored-By: Claude <noreply@anthropic.com>
Drop WHAT/process narration on the two sitemap route handlers per
AGENTS.md ("default to no comments; only add when WHY is non-obvious"):
- sitemap.xml/route.ts: keep only the cross-host Search Console caveat
- sitemap-pages.xml/route.ts: drop the maintenance comment entirely
The force-static headers stay — they capture a real Next 16 export
constraint that's not inferrable from the code.
Flagged in PR #46 review.
Co-Authored-By: Claude <noreply@anthropic.com>
Add Service schema (CDN, provider → Organization, areaServed: Worldwide); omit offers since per-MB USDC pricing isn't a clean ISO-4217 Offer. Add FAQPage sourced from a new FAQ_ITEMS export in components/site/Faq.tsx, so rendered DOM and structured data share one source of truth. Tighten Organization.description to describe the entity, not the product (was the marketing tagline shared with WebSite). Switch Organization.logo from icon.svg to /d_logo.png — Google's structured-data spec lists JPG/PNG/GIF only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR enhances the marketing site’s SEO by adding richer JSON-LD structured data and replacing the previous Next metadata sitemap with explicit, static-export-friendly sitemap endpoints. It also tweaks hero animation/CTA hover styling to match the updated visual behavior.
Changes:
- Add
ServiceandFAQPageJSON-LD schemas inapp/layout.tsx, reusing shared FAQ content. - Replace
app/sitemap.tswith two static XML route handlers: a sitemap index (/sitemap.xml) and a pages sitemap (/sitemap-pages.xml), including a cross-host docs sitemap entry. - Update hero rise animation cadence and adjust
underline-brutalhover behavior (border/arrow color + nudge).
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| components/site/Hero.tsx | Removes per-link opacity styling for the “source” CTA to align with new underline/hover behavior. |
| components/site/Faq.tsx | Hoists FAQ content into an exported FAQ_ITEMS const and renders items via a map for consistency. |
| app/sitemap.xml/route.ts | Adds a hand-written sitemap index XML response for static export at /sitemap.xml. |
| app/sitemap.ts | Removes the previous Next metadata sitemap handler. |
| app/sitemap-pages.xml/route.ts | Adds a hand-written sitemap XML response for site pages at /sitemap-pages.xml. |
| app/layout.tsx | Adds Service + FAQPage JSON-LD and tightens Organization schema (logo/description); reuses FAQ_ITEMS. |
| app/globals.css | Adjusts brutal-rise timing/cadence and changes underline hover from letter-spacing to border/arrow color + transform. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| import { links, SITE_URL, INDEXABLE } from "@/lib/links"; | ||
| import { Chrome } from "@/components/site/Chrome"; | ||
| import { FAQ_ITEMS } from "@/components/site/Faq"; | ||
| import { ScrollReveal } from "@/components/site/ScrollReveal"; |
There was a problem hiding this comment.
Extracted to lib/faq.ts; Faq.tsx and app/layout.tsx both import from there now. Pushed in fed0e1e.
There was a problem hiding this comment.
Code Review
This pull request updates the site's visual animations and transitions in globals.css, refactors the FAQ component to use a centralized data constant, and adds comprehensive structured data (JSON-LD) for Service and FAQPage schemas in the layout. Additionally, it introduces static sitemap generation and updates the organization's metadata. I have no feedback to provide.
# Conflicts: # app/layout.tsx # app/sitemap-pages.xml/route.ts
Decouples the root layout's JSON-LD generation from the FAQ UI module so app/layout.tsx no longer transitively imports Frame/SectionHeader/FaqItem just to read the data. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deploying website with
|
| Latest commit: |
fed0e1e
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://2ad9fa63.website-70y.pages.dev |
| Branch Preview URL: | https://feat-schema-jsonld.website-70y.pages.dev |
Summary
ServiceandFAQPageJSON-LD; tightenOrganizationschema (logo + description). FAQ items hoisted into a shared const so the page and the schema stay in sync.app/sitemap.tswith a hand-written sitemap index at/sitemap.xmlthat points to/sitemap-pages.xml(this site) and the docs sitemap ondocs.decdn.org.underline-brutalhover from letter-spacing to a color/border fade so the arrow tracks the nudge.Test plan
pnpm buildsucceeds andout/sitemap.xml+out/sitemap-pages.xmllook right🤖 Generated with Claude Code