Skip to content

feat: comprehensive SEO & AEO improvements#55

Open
ZingerLittleBee wants to merge 1 commit intomainfrom
seo-aeo-improvements
Open

feat: comprehensive SEO & AEO improvements#55
ZingerLittleBee wants to merge 1 commit intomainfrom
seo-aeo-improvements

Conversation

@ZingerLittleBee
Copy link
Copy Markdown
Owner

Summary

Comprehensive SEO & AEO (Answer Engine Optimization) improvements for the landing site. All changes compile and build successfully.

Changes

Technical SEO

  • robots.txt — New src/app/robots.ts via Next.js Metadata API; allows all crawlers, blocks /api/ and /ingest/
  • sitemap.xml — New src/app/sitemap.ts with all public pages × both locales (en, zh), including hreflang alternates per entry
  • Dynamic <html lang> — Root layout now reads the NEXT_LOCALE cookie to set the correct lang attribute (was hardcoded to "en")
  • Canonical URLs — Each locale layout now emits a <link rel="canonical"> for the current page
  • Hreflang alternates — Locale layout adds <link rel="alternate" hreflang="..."> for both en and zh
  • Middleware header — Passes x-forwarded-path so the locale layout can reconstruct the current URL for canonicals/alternates

On-page SEO

  • Title template%s | Dockerman so sub-pages get "Download | Dockerman", etc.
  • Per-page metadata — Added generateMetadata with locale-aware title + description for: about, download, pricing, changelog, privacy, terms, DPA
  • Robots meta — Added googleBot directives (max-snippet:-1, max-image-preview:large, max-video-preview:-1)
  • Changelog layout — Converted from client component to async server component so it can export metadata

Structured Data (JSON-LD)

  • Organization — Site-wide in root layout (name, url, logo, sameAs)
  • WebSite — Site-wide in root layout
  • FAQPage — On the home page, matching the visible FAQ content in both en and zh
  • SoftwareApplication — On the home page (name, category, OS, price, download URL)

New files

  • src/app/robots.ts
  • src/app/sitemap.ts
  • src/components/JsonLd.tsx — Reusable JSON-LD <script> component
  • src/components/ui/HomeJsonLd.tsx — Home page structured data
  • src/app/[locale]/(main)/pricing/layout.tsx — Pricing metadata layout

This PR was generated with Oz.

- Add robots.txt via Next.js Metadata API (allow all, disallow /api/ and /ingest/)
- Add sitemap.xml with all pages × both locales and hreflang alternates
- Fix <html lang> to be dynamic based on locale cookie (was hardcoded to 'en')
- Add canonical URLs and hreflang alternate links in locale layout metadata
- Add per-page title/description metadata for all sub-pages (about, download,
  pricing, changelog, privacy, terms, dpa) via server-component layouts
- Add title template '%s | Dockerman' for consistent page titles
- Add robots meta with googleBot directives for max snippet/image/video
- Add Organization + WebSite JSON-LD structured data site-wide
- Add FAQPage + SoftwareApplication JSON-LD on home page
- Pass x-forwarded-path header in middleware for canonical URL generation
- Convert changelog layout from client to server component for metadata support

Co-Authored-By: Oz <oz-agent@warp.dev>
@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Mar 4, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
dockerman Ready Ready Preview, Comment Mar 4, 2026 2:50am

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