feat(seo): tenant-driven meta tags, sitemap/robots, reduced-motion, docs
Some checks failed
Architecture Governance / architecture (push) Has been cancelled

Completes the rest of Sprint 28 on top of the earlier admin-scoped
a11y/skeleton pass (576f260):

- SeoService.resetToDefaults() now reads real bootstrap.seo.default /
  branding instead of hardcoded placeholder text + a broken
  /og-image.jpg reference; auto-reapplies via an effect() whenever
  bootstrap (re)loads, same pattern as UiRuntimeFacade.
- New public/sitemap.xml (static baseline, documented per-tenant-dynamic
  limitation) + public/robots.txt Sitemap directive and admin/editor
  Disallow rules.
- Global prefers-reduced-motion override in styles.scss covering every
  existing hover-transform/fade-in/shimmer animation in one place.
- New adminProducts/adminUsers/adminMonitoring/adminAnalytics
  empty-state i18n keys (en/ru/hy) for this sprint's skeleton/empty-state
  consistency fixes.
- docs/KNOWN-ISSUES.md: logged a newly-found, much larger pre-existing
  gap (~178 missing adminXxx.* i18n keys across the whole admin
  backoffice) - deferred to Sprint 29's translation validation, not
  fixed here.
- docs/BACKEND.md: new item 17 (sitemap generation gap).
- docs/ADMIN.md, docs/SPRINT-PLAN.md: rewritten Sprint 28 sections to
  describe the full, combined scope (both commits) instead of the
  earlier admin-only framing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-16 00:19:41 +04:00
parent 576f2600a5
commit 173ceb8081
12 changed files with 333 additions and 33 deletions

View File

@@ -176,6 +176,14 @@ Plus, if authenticated history/wishlist/compare/saved-searches sync is wanted: `
**Frontend files:** `features/admin/analytics/pages/admin-analytics-page.component.html` currently renders the pending-backend badge inline (no gateway method exists for this yet, unlike every other mocked domain in this doc).
## 17. Sitemap generation (Sprint 28, static baseline only)
**Current behavior:** `public/sitemap.xml` (new, Sprint 28) lists only the statically-known top-level marketplace routes (home/catalog/search/wishlist/compare) for the default `ru` locale segment, referenced from `public/robots.txt`'s `Sitemap:` directive.
**Gap:** this is a multi-tenant, config-driven platform (`docs/ARCHITECTURE.md`) — supported locales, categories, products, and static pages are all resolved at runtime from each tenant's bootstrap config, not enumerable from the frontend at build time. A real per-tenant sitemap covering `/:lang/product/:id`, `/:lang/catalog/:categoryId`, and `/:lang/:staticPath` needs a backend/build-time job that reads the same bootstrap data source (categories/products/static pages, items 5/6/3-4 above) per tenant/domain and regenerates or serves this file dynamically — not something the SPA can produce correctly on its own.
**Needed:** a build-time or server-side sitemap generator with access to the real per-tenant product/category/static-page lists and domain, likely alongside whatever eventually serves `bootstrap.json` per-domain server-side (item 2).
## Known reliability issues
### Production 502/504 Bad Gateway on refresh / back-navigation