Posts are written in a private drafts repo and only reach this repo through
an approval step that stamps them with an HMAC over path and content. The
deploy workflow now runs scripts/verify-approvals.mjs before the build and
refuses to build if a post is unstamped, changed after approval, or still
marked as a draft (this repo is public, so a draft here is already published).
PW_PREVIEW=1 builds the site under /udkast for the private review page:
noindex, a banner, no service worker, sitemap or comments.
The nine existing posts are stamped as approved.
Claude-Session: https://claude.ai/code/session_01JmhJG6JnhXfzNiKv8f2vHu
Fire ugers adgangslog (81k requests) viser at ægte Googlebot kun hentede robots.txt,
favicon og et par billeder — plus én enkelt HTML-side i hele perioden. Intet af det her
løser dét (kun indgående links gør), men det fjerner de undskyldninger vi selv havde
lagt ud.
- Sitemappet havde ingen lastmod overhovedet. Nu udleder astro.config.mjs den pr. side:
statiske sider fra deres sidste commit, blogindlæg fra updated/date i frontmatter,
og oversigts-/tagsider fra det nyeste indlæg de viser. Kan en dato ikke fastslås
præcist, udelades lastmod helt — en forkert dato er værre end ingen, fordi Google
holder op med at stole på feltet.
- Det kræver rigtig git-historik, så checkout kører nu fetch-depth: 0 (default shallow
ville give alle filer samme dato).
- Nyt deploy-step pinger IndexNow med de sider dette push faktisk ændrede — udregnet af
scripts/indexnow.mjs ud fra diffen, ikke hele sitemappet, da gentagne fuld-lister er
støj. Nøglefilen lå allerede i public/, men blev aldrig brugt. Hjælper kun Bing/Yandex;
Google understøtter ikke IndexNow. continue-on-error, så det aldrig vælter et deploy.
- /favicon.ico gav 404. Tilføjet som rigtig 3-størrelses ICO (16/32/48) genereret fra
favicon.svg med samme baggrund som de øvrige ikoner.
Claude-Session: https://claude.ai/code/session_018oXJWTRxTYdcV9Kw6M7e5J