seo: én kanonisk URL-form — uden afsluttende skråstreg
Build & Deploy / deploy (push) Successful in 1m43s
Build & Deploy / deploy (push) Successful in 1m43s
Google kendte 41 af sitemapets 44 URL'er som "Webadressen er ikke kendt af Google". Årsagen var at siden fandtes i to former: de interne links peger alle på no-slash (/blog, /cv, /tags/proxmox), mens sitemap og <link rel="canonical"> brugte skråstreg-formen. Origin serverer begge med 200 uden redirect, så Googles linkbaserede opdagelse ramte kun det ene sæt, og sitemapets sæt blev aldrig opdaget. Nu peger canonical, sitemap og RSS alle på no-slash-formen, som de interne links i forvejen brugte. lastmod slås stadig op på Astros egne ruter (som har skråstregen) FØR URL'en strippes, så sitemapets 44 lastmod-datoer er uændrede. Claude-Session: https://claude.ai/code/session_0198n4owY35jQpwht1wCGzfh
This commit is contained in:
@@ -145,6 +145,10 @@ export default defineConfig({
|
||||
if (pathname === '/') item.priority = 1.0;
|
||||
const lastmod = lastmodByRoute.get(pathname);
|
||||
if (lastmod) item.lastmod = lastmod;
|
||||
// Samme kanoniske form som <link rel="canonical"> og de interne links:
|
||||
// uden afsluttende skråstreg. Slås lastmod op FØR strippet, fordi
|
||||
// lastmodByRoute er nøglet på Astros egne ruter (som har skråstregen).
|
||||
if (pathname !== '/') item.url = item.url.replace(/\/$/, '');
|
||||
return item;
|
||||
},
|
||||
}),
|
||||
|
||||
@@ -19,7 +19,11 @@ const {
|
||||
|
||||
const pageTitle = title ? `${title} · ${SITE.name}` : `${SITE.title} — Datalog & Technical Solution Architect`;
|
||||
const desc = description ?? SITE.description;
|
||||
const canonical = new URL(Astro.url.pathname, SITE.url).href;
|
||||
// Kanonisk form er UDEN afsluttende skråstreg. Origin serverer begge former med
|
||||
// 200, og de interne links peger alle på no-slash — så canonical og sitemap skal
|
||||
// gøre det samme, ellers opdager Google to adskilte sæt af de samme sider.
|
||||
const canonicalPath = Astro.url.pathname.replace(/\/$/, '') || '/';
|
||||
const canonical = new URL(canonicalPath, SITE.url).href;
|
||||
const ogImage = new URL(image ?? '/og.png', SITE.url).href;
|
||||
const graphs = [baseGraph, ...jsonLd];
|
||||
---
|
||||
|
||||
@@ -9,11 +9,14 @@ export async function GET(context) {
|
||||
title: SITE.title,
|
||||
description: SITE.description,
|
||||
site: context.site,
|
||||
// Samme kanoniske URL-form som canonical og sitemap: uden afsluttende
|
||||
// skråstreg. @astrojs/rss tilføjer den ellers selv (default true).
|
||||
trailingSlash: false,
|
||||
items: posts.map((p) => ({
|
||||
title: p.data.title,
|
||||
description: p.data.description,
|
||||
pubDate: p.data.date,
|
||||
link: `/blog/${p.id}/`,
|
||||
link: `/blog/${p.id}`,
|
||||
})),
|
||||
customData: `<language>da-dk</language>`,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user