Files
mercadodevida/work/artifacts/F-015/implementer.md
2026-08-17 22:23:10 +02:00

2.6 KiB

Implementer — F-015 SEO core: structured data, sitemap, redirects

Summary

Implemented SEO core for the storefront catalog and added the missing public brand listing needed by sitemap generation.

Backend changes

  • Added BrandRepository.list() and ListBrands use case.
  • Added public GET /brands route returning { items: [...] } in stable name ASC, id ASC order.
  • The endpoint is read-only and public, matching existing public /marca/:slug behavior.

Storefront SEO changes

  • Added project/storefront/src/lib/seo/json-ld.tsx:
    • Organization JSON-LD.
    • Product JSON-LD.
    • BreadcrumbList JSON-LD.
    • Safe JSON-LD script rendering with < escaped.
  • Added Organization JSON-LD and root canonical/OpenGraph metadata in layout.tsx.
  • Added Product + Breadcrumb JSON-LD to /productos/[slug].
  • Added Breadcrumb JSON-LD to /categoria/[slug] and /marca/[slug].
  • Added sitemap.xml metadata route:
    • Static public routes: /, /products/search.
    • Active products through searchProducts() pagination; backend search enforces activeOnly = true, excluding draft content.
    • Category URLs from flattened listCategoryTree().
    • Brand URLs from new listBrands().
    • API failures degrade to static URLs instead of failing the build.
  • Added robots.txt metadata route allowing public crawl, disallowing /api/, and pointing to sitemap.
  • Added redirect store and proxy:
    • project/storefront/src/lib/seo/redirects.ts defines RedirectRepository and env-backed parser.
    • project/storefront/src/proxy.ts returns HTTP 301 for configured same-origin local path redirects.
    • REDIRECTS_JSON accepts an array like [{ "from": "/old", "to": "/new" }].
    • Parser rejects external URLs, protocol-relative URLs and self-redirects.

Documentation

  • Updated project/README.md with:
    • Public GET /brands route.
    • JSON-LD coverage.
    • sitemap.xml / robots.txt behavior.
    • REDIRECTS_JSON redirect format.

Evidence

  • cd project/storefront && npm run lint — PASS.
  • cd project/storefront && npm run typecheck — PASS.
  • cd project/storefront && npm run build — PASS. Build output includes /robots.txt, /sitemap.xml, and Proxy.
  • cd project && npm run lint — PASS.
  • cd project && npm run typecheck — PASS.
  • cd project && npm test — PASS: 17 passed, 7 skipped; 64 assertions passed, 33 skipped.
  • ./scripts/verify.sh — PASS.

Notes

  • No new dependency was added.
  • No hreflang or external SEO tooling integration was added, per scope.
  • Google/Lighthouse online validators were not available in this environment; validation is structural plus Next build/typecheck evidence.