feat(seo): noindex hook, recipe self-canonical, list-page metadata
CI / update (push) Successful in 37s
CI / update (push) Successful in 37s
Add X-Robots-Tag noindex,nofollow handler in hooks.server.ts for /api,
/login, /logout, /register, /settings, /tasks, /fitness, /cospend,
/expenses, and the recipe admin/edit/add/search/favorites/to-try paths.
Header-based so the rule lives in one place and covers JSON responses.
Recipe detail pages now emit a self-canonical pointing at the bare slug —
the layout helper deliberately skipped detail pages, leaving query-param
variants (?multiplier=2, ?utm=…) as duplicate URLs in Google's index.
Per-page Seo on list pages so each ranks for its category-level query:
- Apologetik contra/pro indices now use localized heading + lede instead
of hardcoded English descriptions
- Calendar month view title includes month + rite ("April 2026 ·
Liturgical Calendar (Vetus Ordo) — Bocken")
- Recipe /category, /tag, /icon, /season hub + detail pages get
descriptions via new *_meta_description and *_meta_prefix i18n keys
(added in both DE and EN locales)
This commit is contained in:
@@ -138,6 +138,16 @@ export const de = {
|
||||
icons_title: 'Icons',
|
||||
tips_title: 'Tipps & Tricks',
|
||||
favorites_meta_description: 'Meine favorisierten Rezepte aus der Bockenschen Küche.',
|
||||
|
||||
// Browse-page meta descriptions (for SEO discovery via category-level queries)
|
||||
categories_meta_description: 'Rezepte nach Kategorie durchstöbern — Hauptspeisen, Vorspeisen, Desserts, Brot, Suppen und mehr aus der Bockenschen Sammlung.',
|
||||
keywords_meta_description: 'Rezepte nach Stichwort filtern — von Hefeteig bis zu Italien, von Käse bis zu Kürbis.',
|
||||
in_season_meta_description: 'Saisonal passende Rezepte — was gerade Saison hat, vom Frühling bis zum Winter.',
|
||||
icons_meta_description: 'Rezepte nach Symbol durchstöbern — eine visuelle Übersicht der Bockenschen Sammlung.',
|
||||
category_meta_prefix: 'Rezepte in der Kategorie',
|
||||
tag_meta_prefix: 'Rezepte mit dem Stichwort',
|
||||
icon_meta_prefix: 'Rezepte mit dem Symbol',
|
||||
season_meta_prefix: 'Rezepte für',
|
||||
empty_favorites_1: 'Du hast noch keine Rezepte als Favoriten gespeichert.',
|
||||
empty_favorites_2: 'Besuche ein Rezept und klicke auf das Herz-Symbol, um es zu deinen Favoriten hinzuzufügen.',
|
||||
|
||||
|
||||
@@ -138,6 +138,16 @@ export const en = {
|
||||
icons_title: 'Icons',
|
||||
tips_title: 'Tips & Tricks',
|
||||
favorites_meta_description: "My favorite recipes from Bocken's kitchen.",
|
||||
|
||||
// Browse-page meta descriptions (for SEO discovery via category-level queries)
|
||||
categories_meta_description: "Browse recipes by category — mains, starters, desserts, breads, soups and more from Bocken's collection.",
|
||||
keywords_meta_description: 'Filter recipes by keyword — from yeast doughs to Italian, from cheese to pumpkin.',
|
||||
in_season_meta_description: 'Seasonal recipes for what is in season right now, from spring to winter.',
|
||||
icons_meta_description: "Browse recipes by symbol — a visual overview of Bocken's collection.",
|
||||
category_meta_prefix: 'Recipes in category',
|
||||
tag_meta_prefix: 'Recipes tagged',
|
||||
icon_meta_prefix: 'Recipes with symbol',
|
||||
season_meta_prefix: 'Recipes for',
|
||||
empty_favorites_1: "You haven't saved any recipes as favorites yet.",
|
||||
empty_favorites_2: 'Visit a recipe and click the heart icon to add it to your favorites.',
|
||||
|
||||
|
||||
Reference in New Issue
Block a user