From d4bb8deb5eafca61ad3772b84b53cc958ef48aec Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 14 May 2026 17:47:49 -0700 Subject: [PATCH] Harden calculator SEO signals --- hdyc-svelte/src/lib/seo.ts | 1 + hdyc-svelte/src/routes/[slug]/+page.server.ts | 12 ++++++++---- hdyc-svelte/src/routes/[slug]/+page.svelte | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/hdyc-svelte/src/lib/seo.ts b/hdyc-svelte/src/lib/seo.ts index 262e6bc..bc2c1f3 100644 --- a/hdyc-svelte/src/lib/seo.ts +++ b/hdyc-svelte/src/lib/seo.ts @@ -84,6 +84,7 @@ export const calculatorSeo = (calc: CalculatorDef) => { title, description, canonicalUrl: canonical, + canonicalSlug, noindex, }; }; diff --git a/hdyc-svelte/src/routes/[slug]/+page.server.ts b/hdyc-svelte/src/routes/[slug]/+page.server.ts index db165de..21ab052 100644 --- a/hdyc-svelte/src/routes/[slug]/+page.server.ts +++ b/hdyc-svelte/src/routes/[slug]/+page.server.ts @@ -1,7 +1,7 @@ -import { error } from '@sveltejs/kit'; +import { error, redirect } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; import { getCalculatorBySlug, getCalculatorsByCategory, categories, getEffectiveCategory } from '$lib/data/calculators'; -import { calculatorJsonLd, calculatorSeo } from '$lib/seo'; +import { calculatorJsonLd, calculatorSeo, toJsonLd } from '$lib/seo'; export const load: PageServerLoad = ({ params, setHeaders }) => { const calc = getCalculatorBySlug(params.slug); @@ -13,13 +13,17 @@ export const load: PageServerLoad = ({ params, setHeaders }) => { } const effectiveCategory = getEffectiveCategory(calc); + const seo = calculatorSeo(calc); + + if (seo.canonicalSlug !== calc.slug) { + throw redirect(301, `/${seo.canonicalSlug}`); + } const related = getCalculatorsByCategory(effectiveCategory) .filter(c => c.slug !== calc.slug) .slice(0, 8); const categoryMeta = categories[effectiveCategory]; - const seo = calculatorSeo(calc); if (seo.noindex) { setHeaders({ 'X-Robots-Tag': 'noindex, follow' @@ -30,7 +34,7 @@ export const load: PageServerLoad = ({ params, setHeaders }) => { calculator: calc, related, seo, - jsonLd: JSON.stringify(calculatorJsonLd(calc, seo.canonicalUrl)), + jsonLd: toJsonLd(calculatorJsonLd(calc, seo.canonicalUrl)), category: effectiveCategory, categoryLabel: categoryMeta?.label ?? calc.category, categoryIcon: categoryMeta?.icon ?? '🔢' diff --git a/hdyc-svelte/src/routes/[slug]/+page.svelte b/hdyc-svelte/src/routes/[slug]/+page.svelte index febf2ea..edb653f 100644 --- a/hdyc-svelte/src/routes/[slug]/+page.svelte +++ b/hdyc-svelte/src/routes/[slug]/+page.svelte @@ -68,6 +68,7 @@ + {@html ``} {@html ``} {@html ``}