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

53 lines
2.6 KiB
Markdown

# 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.