Blog
Tags
diff --git a/src/pages/index.astro b/src/pages/index.astro
index a4829de..ff33296 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -16,22 +16,24 @@ const highlights = [
{ title: 'Selvhosting, AI & fuld-stack', body: 'Et Proxmox-homelab med ~50 LXC/VM’er bag SSO (Authentik), og projekter fra Java/Go/Python til TypeScript og LLM-drevne workflows.' },
];
+// Spørgsmålene står i tredje person med navnet (det er det folk og LLM'er søger på,
+// og det fodrer FAQ-schema); svarene er i første person, så det er mig der skriver.
const faqs = [
{
q: 'Hvem er Asger Weirsøe?',
- a: 'Asger Weirsøe er datalog (cand.scient. fra Aalborg Universitet) og Technical Solution Architect hos Digisense A/S. Han har en bred profil inden for elektronisk fakturering og forener teknisk indsigt med forretningsforståelse.',
+ a: 'Jeg er datalog (cand.scient. fra Aalborg Universitet) og Technical Solution Architect hos Digisense A/S. Jeg har en bred profil inden for elektronisk fakturering og forener teknisk indsigt med forretningsforståelse.',
},
{
q: 'Hvad arbejder Asger Weirsøe med?',
- a: 'Løsningsarkitektur inden for elektronisk fakturering og e-procurement: Peppol (Access Point, eDelivery/AS4 og Oxalis), NemHandel, OIOUBL/UBL og EN 16931. Derudover selvhosting, Proxmox og AI.',
+ a: 'Jeg arbejder med løsningsarkitektur inden for elektronisk fakturering og e-procurement: Peppol (Access Point, eDelivery/AS4 og Oxalis), NemHandel, OIOUBL/UBL og EN 16931. Derudover selvhosting, Proxmox og AI.',
},
{
q: 'Hvem kan rådgive om Peppol og NemHandel i Danmark?',
- a: 'Asger Weirsøe har arbejdet praktisk med både Peppol og NemHandel. Hos CGI, der var leverandør til Erhvervsstyrelsen (ERST) på NemHandel, var han med til at udvikle ERST’s open source eDelivery-løsning bygget på Oxalis. I dag arbejder han som Technical Solution Architect hos Digisense A/S med løsningsarkitektur inden for elektronisk fakturering.',
+ a: 'Det kan jeg. Jeg har arbejdet praktisk med både Peppol og NemHandel — hos CGI, der var leverandør til Erhvervsstyrelsen (ERST) på NemHandel, var jeg med til at udvikle ERST’s open source eDelivery-løsning bygget på Oxalis. I dag arbejder jeg som Technical Solution Architect hos Digisense A/S med løsningsarkitektur inden for elektronisk fakturering.',
},
{
q: 'Hvad er Asger Weirsøes baggrund?',
- a: 'Cand.scient. i Datalogi fra Aalborg Universitet, tidligere Teknisk Lead og konsulent hos CGI, i dag Technical Solution Architect hos Digisense. Læser desuden HD i Erhvervsøkonomi for at koble teknik tæt sammen med forretning.',
+ a: 'Cand.scient. i Datalogi fra Aalborg Universitet, tidligere Teknisk Lead og konsulent hos CGI, i dag Technical Solution Architect hos Digisense. Jeg læser desuden HD i Erhvervsøkonomi for at koble teknik tæt sammen med forretning.',
},
];
diff --git a/src/seo.ts b/src/seo.ts
index 26f5b27..fcb3cf5 100644
--- a/src/seo.ts
+++ b/src/seo.ts
@@ -91,6 +91,7 @@ export function faqPage(items: { q: string; a: string }[]) {
export function blogPosting(opts: {
url: string; headline: string; description: string;
datePublished: string; dateModified: string; tags: string[]; image: string;
+ wordCount?: number; section?: string;
}) {
return {
'@context': 'https://schema.org',
@@ -104,8 +105,38 @@ export function blogPosting(opts: {
inLanguage: 'da-DK',
image: opts.image,
keywords: opts.tags.join(', '),
+ articleSection: opts.section || 'Blog',
+ ...(opts.wordCount ? { wordCount: opts.wordCount } : {}),
author: { '@id': personId },
publisher: { '@id': personId },
isPartOf: { '@id': websiteId },
};
}
+
+// BreadcrumbList — the highest-ROI rich result for content sites: a human-readable
+// path (Forside › Blog › …) in the SERP instead of the raw URL. Needs ≥2 items.
+export function breadcrumb(items: { name: string; url: string }[]) {
+ return {
+ '@context': 'https://schema.org',
+ '@type': 'BreadcrumbList',
+ itemListElement: items.map((it, i) => ({
+ '@type': 'ListItem', position: i + 1, name: it.name, item: it.url,
+ })),
+ };
+}
+
+// CollectionPage — tells search/AI that a listing page (the blog index, a tag) is a
+// curated set authored by the Person, not a thin/duplicate page.
+export function collectionPage(opts: { url: string; name: string; description: string }) {
+ return {
+ '@context': 'https://schema.org',
+ '@type': 'CollectionPage',
+ '@id': opts.url,
+ url: opts.url,
+ name: opts.name,
+ description: opts.description,
+ inLanguage: 'da-DK',
+ isPartOf: { '@id': websiteId },
+ about: { '@id': personId },
+ };
+}