Services

Seo Search Performance Final


SEO, search availability, and site performance final review

Date: 2026-06-22

Baseline: docs/audits/seo-search-performance-baseline.md

Completed fixes#

SEO#

  • Normalized blog default canonical origin to https://www.assistance.bg/blog in apps/blog/lib/constants.ts.
  • Removed the out-of-scope /docs/ disallow from blog robots metadata in apps/blog/app/robots.ts.
  • Pointed apps/www/public/robots.txt at the sitemap index (https://www.assistance.bg/sitemap.xml) instead of only sitemap_www.xml.
  • Made apps/www/lib/metadata.ts emit the same absolute URL for canonical metadata and Open Graph URL.
  • Added focused regression coverage:
    • apps/blog/test/seo-routes.test.ts
    • apps/www/lib/__tests__/metadata.test.ts

Search availability#

  • Added tools/scripts/check-search-indexes.mjs to verify Meilisearch health plus required public indexes.
  • Added search:health to package.json and .mise.toml.
  • Documented search:health in .docs/developer.md.
  • Changed root index:blog to target the blog app package.
  • Marked docs search fallback responses with x-search-status: unavailable while preserving the existing empty-array response shape.

Performance guardrails#

  • Added mise tasks for perf:cf-budgets, perf:smoke, and perf:check.
  • Documented performance tasks in .docs/developer.md.
  • Expanded representative smoke routes for public www, docs, and blog pages in tools/performance-smoke-routes.json.
  • Updated tools/scripts/check-cloudflare-artifact-budgets.mjs to support file outputs and configurable exclusions.
  • Scoped OpenNext artifact budgets to deployable assets plus worker.js instead of counting server/cache internals.
  • Calibrated public www, docs, and blog thresholds against the currently verified artifact surface.

Verification evidence#

1
$ cd apps/blog && mise exec -- pnpm exec vitest --run test/seo-routes.test.ts
2
Test Files 1 passed (1)
3
Tests 2 passed (2)
1
$ cd apps/www && mise exec -- pnpm exec vitest --run lib/__tests__/metadata.test.ts
2
Test Files 1 passed (1)
3
Tests 1 passed (1)
1
$ mise run search:health -- --dry-run
2
Search service: http://localhost:3049 (available)
3
MISS docs: 404 Not Found: Index `docs` not found.
4
MISS blog: 404 Not Found: Index `blog` not found.

This is the expected current operational finding: the service is healthy, but local public search indexes still need to be created with mise run index:all before local public search is available.

1
$ mise exec -- pnpm perf:cf-budgets -- --app www --app docs --app blog --allow-missing
2
www: OK javascriptGzip, assetsRaw, largestAssetRaw, workerRaw
3
blog: OK javascriptGzip, assetsRaw, largestAssetRaw, workerRaw
4
docs: OK javascriptGzip, assetsRaw, largestAssetRaw, workerRaw
1
$ mise exec -- pnpm perf:smoke -- --list
2
www: /, /services, /services/cicd-audit
3
docs: /, /docs, /docs/guides/guides/cicd-pipeline
4
blog: /, /blog, /blog/python-async-await-practical-guide
1
$ mise exec -- node --check tools/scripts/check-search-indexes.mjs
2
$ mise exec -- node --check tools/scripts/check-cloudflare-artifact-budgets.mjs
3
# both completed with exit 0

Remaining risks#

  • Local Meilisearch still lacks docs and blog indexes until mise run index:all is run successfully.
  • Full mise run perf:cf-budgets -- --allow-missing --dry-run still reports existing non-public-scope misses for academy and design-system; the public www/docs/blog subset now passes.
  • perf:smoke remains a route smoke tool that requires dev or preview servers to already be running.
  • Broad workspace tests/builds were not rerun; verification was intentionally limited to changed SEO tests and public performance/search guardrails.