53 lines
2.6 KiB
Markdown
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.
|