From c2e56ef339c54827d688c5a24cb634146a830ce8 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Wed, 4 Nov 2026 22:55:40 +0100 Subject: [PATCH] docs(33-16): release-note drafts for the layer fixes - vue-seo-layer v0.2.0: the route report's noindex paths, sitemap pages per locale and not over a catch-all, root files 503 while the backend is unknown - vue-journal-layer v0.8.0: path-form listing routes, the catch-all upgrade note, post article meta - vue-menu-layer and vue-faq-layer v0.5.0: the catch-all upgrade note --- .../33-14-notes-vue-faq-layer-v0.5.0.md | 2 +- .../33-14-notes-vue-journal-layer-v0.8.0.md | 2 ++ .../33-14-notes-vue-menu-layer-v0.5.0.md | 2 +- .../33-14-notes-vue-seo-layer-v0.2.0.md | 9 +++++---- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-faq-layer-v0.5.0.md b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-faq-layer-v0.5.0.md index 44e90b33..7f9a7772 100644 --- a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-faq-layer-v0.5.0.md +++ b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-faq-layer-v0.5.0.md @@ -12,5 +12,5 @@ Excerpt: FAQ blocks add a FAQPage node to the page's one JSON-LD graph and can r ## Changed - **Breaking:** the layer extends vue-seo-layer, and the copied site cache purge route, library and plugin are removed (vue-seo-layer provides them with the same environment variables). -- **Upgrade:** set `NUXT_SEO_API_BASE`, or `seo: { cms: false }` for a site without the SEO plugin; an app without pages of its own sets `seo: { htmlSitemap: false }`. When a page shows several FAQs, set `schema` false on all but one. +- **Upgrade:** set `NUXT_SEO_API_BASE`, or `seo: { cms: false }` for a site without the SEO plugin. The layer brings vue-seo-layer's HTML sitemap pages (pl `/mapa-strony`, en `/sitemap` by default). An app that renders its pages through a root catch-all (`[...slug].vue`) gets none, so a CMS page at such a path stays visible, unless it sets `seo.htmlSitemap.overCatchAll: true`; an app with its own page at such a path keeps it; `seo: { htmlSitemap: false }` turns them off. When a page shows several FAQs, set `schema` false on all but one. - Requires vue-seo-layer v0.2.0. diff --git a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-journal-layer-v0.8.0.md b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-journal-layer-v0.8.0.md index 0ca48792..0fc0bc29 100644 --- a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-journal-layer-v0.8.0.md +++ b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-journal-layer-v0.8.0.md @@ -11,12 +11,14 @@ Excerpt: The journal layer now runs on vue-seo-layer: one H1 per post page, brea - Breadcrumbs at the top of journal pages (`journal.breadcrumbs: false` when the layout renders them), CMS pagination links, a category's pillar content on its first page. - Previous and next posts in the category when the Journal's scored mode answers them. - Auto-links, outbound link rules and image attributes applied to the post body. +- With `seo.pagination.form: 'path'`, listing pages get routes for the SEO layer's segments, its defaults included (`/blog/strona/2`, `/blog/page/2`), matching the pagination links. ## Changed - **Breaking: `@nuxtjs/seo` is removed.** Remove `site: { url, name }` and the `ogImage`, `seo.canonicalQueryWhitelist`, `sitemap`, `robots` and `schemaOrg` keys; set `NUXT_SEO_API_BASE`, or `seo: { cms: false }` for a site without the SEO plugin. The journal sitemap source is gone; the sitemap plugin builds the sitemaps. - **Breaking: post cards have one link.** The read-more link and the image link are removed; the whole card is clickable. The post title may be a `p.journal-post__title`, related post cards are `h3`. Adjust app CSS that targets the old elements. - The shared site cache purge route moved to vue-seo-layer with the same path and variables. +- **Upgrade:** The layer brings vue-seo-layer's HTML sitemap pages (pl `/mapa-strony`, en `/sitemap` by default). An app that renders its pages through a root catch-all (`[...slug].vue`) gets none, so a CMS page at such a path stays visible, unless it sets `seo.htmlSitemap.overCatchAll: true`; an app with its own page at such a path keeps it; `seo: { htmlSitemap: false }` turns them off. Post pages keep `og:type` article and their publish and update times next to the CMS head. - Requires vue-seo-layer v0.2.0. ## Fixed diff --git a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-menu-layer-v0.5.0.md b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-menu-layer-v0.5.0.md index fb651050..71fa167b 100644 --- a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-menu-layer-v0.5.0.md +++ b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-menu-layer-v0.5.0.md @@ -7,5 +7,5 @@ Excerpt: The menu layer now extends vue-seo-layer, so every page of a menu-only ## Changed - **Breaking:** `server/api/__site__/cache/purge.post.ts`, `server/lib/siteCachePurge.ts` and `server/plugins/site-cache-purge.ts` are removed from this layer; vue-seo-layer provides the same route, library and plugin with the same environment variables. An app that imported the library from this layer imports it from vue-seo-layer. -- **Upgrade:** set `NUXT_SEO_API_BASE` when the backend is not on `http://127.0.0.1:8096`, or `seo: { cms: false }` for a site without the SEO plugin. An app without pages of its own (only `app.vue`) sets `seo: { htmlSitemap: false }`. +- **Upgrade:** set `NUXT_SEO_API_BASE` when the backend is not on `http://127.0.0.1:8096`, or `seo: { cms: false }` for a site without the SEO plugin. The layer brings vue-seo-layer's HTML sitemap pages (pl `/mapa-strony`, en `/sitemap` by default). An app that renders its pages through a root catch-all (`[...slug].vue`) gets none, so a CMS page at such a path stays visible, unless it sets `seo.htmlSitemap.overCatchAll: true`; an app with its own page at such a path keeps it; `seo: { htmlSitemap: false }` turns them off. - Requires vue-seo-layer v0.2.0. diff --git a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-seo-layer-v0.2.0.md b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-seo-layer-v0.2.0.md index 6164a233..4796aee8 100644 --- a/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-seo-layer-v0.2.0.md +++ b/.planning/phases/33-seo-output-audit-and-content/33-14-notes-vue-seo-layer-v0.2.0.md @@ -9,16 +9,17 @@ Excerpt: hreflang and one JSON-LD graph on every page, robots.txt and sitemaps s ## Added - ``, `` with `usePagination()` (prev and next links, `%pages%` in the CMS title), and HTML sitemap pages with a footer link (``), in English and Polish. -- The route report: at server start the site's static pages go to the CMS page registry. With `@nuxtjs/i18n` prefix strategies only the default-locale pages are reported; their translations are set in SEO › Pages. +- The route report: at server start the site's static pages go to the CMS page registry. With `@nuxtjs/i18n` prefix strategies only the default-locale pages are reported; their translations are set in SEO › Pages. The same report lists the static pages the site serves noindex (signed-in pages, a noindex `seo.robots`, `seo.noindexRoutes`, and their translations), so the CMS leaves them out of the XML and HTML sitemaps. - A startup drift check that logs when the CMS's URL patterns, pagination or HTML sitemap paths differ from the build. - Body link utilities for auto-links, outbound rules and image attributes. -- `seo.noindexRoutes`, `seo.htmlSitemap`, `seo.pagination` and `seo.routeReport` options. +- HTML sitemap pages exist once per locale with `@nuxtjs/i18n`, at the configured path, and never take a path from an app's catch-all page unless `seo.htmlSitemap.overCatchAll` is on. +- `seo.noindexRoutes`, `seo.htmlSitemap` (with `overCatchAll`), `seo.pagination` and `seo.routeReport` options. ## Changed -- **Upgrade:** set `NUXT_SEO_ROUTE_REPORT_TOKEN` (or keep `NUXT_SEO_NOTFOUND_TOKEN`), declare browser-only routes in `seo.noindexRoutes` or render them on the server, and remove nginx locations for `/sitemap*` and `/robots.txt` so the site serves them. An app with `@nuxtjs/i18n` gives each locale its full HTML sitemap path in `seo.htmlSitemap.paths`. An app without pages of its own sets `seo: { htmlSitemap: false }`. +- **Upgrade:** set `NUXT_SEO_ROUTE_REPORT_TOKEN` (or keep `NUXT_SEO_NOTFOUND_TOKEN`), declare browser-only routes in `seo.noindexRoutes` or render them on the server, and remove nginx locations for `/sitemap*` and `/robots.txt` so the site serves them. An app with `@nuxtjs/i18n` gives each locale its full HTML sitemap path in `seo.htmlSitemap.paths`. An app that renders its pages through a root catch-all (`[...slug].vue`) gets no HTML sitemap pages unless it sets `seo.htmlSitemap.overCatchAll: true`; an app with its own page at a sitemap path keeps it. - Works best with sm-seo-plugin v0.2.0 and sm-sitemap-plugin v0.2.0; against an older backend the new parts stay off. ## Fixed -- Root files fall through to the app until the backend has given a site answer. +- robots.txt, sitemap.xml and llms.txt answer 503 with `Retry-After` while the backend has not answered since the server started, so a crawler retries instead of reading a missing robots.txt as allow-all; this also keeps a staging site's `Disallow` in force.