From 80d03e741a697bdce0cb68740cd9c066900b7e63 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Wed, 4 Nov 2026 14:22:04 +0100 Subject: [PATCH] docs(33-09): complete journal, menu and FAQ layers on the SEO layer plan --- .../33-09-SUMMARY.md | 502 ++++++++++++++++++ .../deferred-items.md | 15 + 2 files changed, 517 insertions(+) create mode 100644 .planning/phases/33-seo-output-audit-and-content/33-09-SUMMARY.md diff --git a/.planning/phases/33-seo-output-audit-and-content/33-09-SUMMARY.md b/.planning/phases/33-seo-output-audit-and-content/33-09-SUMMARY.md new file mode 100644 index 00000000..652e31e9 --- /dev/null +++ b/.planning/phases/33-seo-output-audit-and-content/33-09-SUMMARY.md @@ -0,0 +1,502 @@ +--- +phase: 33-seo-output-audit-and-content +plan: 09 +subsystem: vue-journal-layer, vue-menu-layer, vue-faq-layer, vue-seo-layer, sm-journal-plugin +tags: [nuxt-layer, seo-layer, headings, h1, post-card, body-links, autolink, outbound, breadcrumbs, pagination, itemlist, faqpage, purge, related-posts] + +requires: + - phase: 33-08 + provides: vue-seo-layer components (SeoBreadcrumbs, SeoPagination, usePagination), useSchemaNode, labels, seo.links.newTabHint, seo.pagination, the shared purge route + - phase: 33-07 + provides: vue-seo-layer runtime (resolve middleware, useSeoAnswer, useCmsSeo, one JSON-LD graph, smoke grammar) + - phase: 33-02 + provides: content_h1_to_h2 on GET /posts/{slug} and every GET /categories row; the Journal policy keeps rel nofollow/sponsored/ugc and alt="" +provides: + - vue-seo-layer app/utils/bodyLinks.ts (autolink, applyOutbound, imageAttrs) + - vue-journal-layer on vue-seo-layer without @nuxtjs/seo; one H1 in both Journal H1 modes; journal.postTitleTag and journal.breadcrumbs + - renderJournalBody (L7 order), gateJournalHtml/sanitizeJournalHtml demoteH1, rel token policy + - one link per post card (headingLevel 2 | 3), SeoBreadcrumbs on journal pages, JournalPagination as SeoPagination, path-form listing routes, pillar text on page 1, ItemList nodes + - vue-menu-layer and vue-faq-layer on vue-seo-layer without purge copies; FaqBlock headingLevel 0 and schema (FAQPage node) + - sm-journal-plugin golem15.journal.related_mode / related_count (opt-in scored related posts, previous_in_category / next_in_category) +affects: [33-10, 33-11, 33-12, 33-13, 33-14] + +actuals: + tokens: 40100 + tasks: 4 + commits: 13 +plan_head_before: + vue-seo-layer: b051bda0809b9a8ca58f2c55c55d12d6477e8127 + vue-journal-layer: 1dd31760601e4bbbe93033b5aba6c5edb2c1bef3 + vue-menu-layer: ef3a090647ac994fa920baa48464edcd8338a77f + vue-faq-layer: 1f23340a2f8bc14ac3bcd8819485dc13eca1fda3 + sm-journal-plugin: 0edf6e1b67d4f7d8f62980e30d52292cce94faf3 +plan_head_after: + vue-seo-layer: 7af91fc + vue-journal-layer: adcea4d + vue-menu-layer: 8b5da67 + vue-faq-layer: f7ec4fe + sm-journal-plugin: ee3cb26 + +tech-stack: + added: [] + patterns: + - "A content layer extends vue-seo-layer through a link dependency during development (P33-33); 33-14 swaps it for the git tag pin" + - "Body link steps live in vue-seo-layer (pure, auto-imported); the journal gate takes them as injected functions, so its node tests never import across packages" + - "Smoke checks of page structure: headings=strict (one h1, no skipped level) and cardlinks=N, outside