SEO & content optimization: meta tags, structured data, improved targeting
All checks were successful
Build and Deploy PunktFri / build-and-deploy (push) Successful in 1m19s

Major improvements:
- Add comprehensive meta tags (Open Graph, Twitter Cards, canonical URL)
- Implement schema.org structured data (Organization, FAQPage)
- Optimize H1 with keywords: "Non-profit registrator for .dk-domæner"
- Add robots.txt and sitemap.xml with Flask routes
- Improve hero intro with specific pain point (90-150 kr/year)
- Enhance DNSSEC description with technical details (DS-records)
- Update timeline to May 2026
- Add FAQ comparing PunktFri to commercial providers
- CSS styling for H1 subtitle

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Henrik Jess Nielsen
2026-05-22 10:30:28 +02:00
parent dfb937e7cc
commit e453d140b5
6 changed files with 167 additions and 13 deletions

12
app.py
View File

@@ -3,7 +3,7 @@ import logging
import sqlite3 import sqlite3
from functools import wraps from functools import wraps
from flask import Flask, render_template, request, redirect, url_for, g, Response from flask import Flask, render_template, request, redirect, url_for, g, Response, send_from_directory
DATABASE = os.environ.get("DATABASE", "punktfri.db") DATABASE = os.environ.get("DATABASE", "punktfri.db")
LOG_FILE = os.environ.get("LOG_FILE", "signups.log") LOG_FILE = os.environ.get("LOG_FILE", "signups.log")
@@ -135,6 +135,16 @@ def health():
}, 200 }, 200
@app.route("/robots.txt")
def robots():
return send_from_directory(app.static_folder, "robots.txt")
@app.route("/sitemap.xml")
def sitemap():
return send_from_directory(app.static_folder, "sitemap.xml")
init_db() init_db()
if __name__ == "__main__": if __name__ == "__main__":

10
static/robots.txt Normal file
View File

@@ -0,0 +1,10 @@
# robots.txt for punktfri.dk
User-agent: *
Allow: /
# Sitemap
Sitemap: https://punktfri.dk/sitemap.xml
# Disallow admin area
Disallow: /admin

9
static/sitemap.xml Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://punktfri.dk/</loc>
<lastmod>2026-05-22</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>

View File

@@ -92,6 +92,15 @@ header nav {
color: var(--primary); color: var(--primary);
} }
.hero h1 .h1-subtitle {
font-size: clamp(1rem, 2.5vw, 1.3rem);
font-weight: 400;
color: var(--text);
display: block;
margin-top: 0.5rem;
letter-spacing: -0.01em;
}
.hero .tagline { .hero .tagline {
font-size: clamp(1rem, 2.2vw, 1.2rem); font-size: clamp(1rem, 2.2vw, 1.2rem);
color: var(--text); color: var(--text);

View File

@@ -3,12 +3,46 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="PunktFri — non-profit registratorinitiativ for selvhostere med egne navneservere."> <meta name="description" content="Non-profit .dk registrator for selvhostere med egne navneservere og DNSSEC. Kostpris uden markup. Alternativ til kommercielle registratorer ved Punktum dk.">
<title>{% block title %}PunktFri{% endblock %}</title> <title>{% block title %}PunktFri{% endblock %}</title>
<!-- Canonical URL -->
<link rel="canonical" href="https://punktfri.dk/">
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content="https://punktfri.dk/">
<meta property="og:title" content="PunktFri — Selvhosternes .dk-registrator">
<meta property="og:description" content="Non-profit registrator for tekniske brugere med egne navneservere. Kostpris, ingen markup, fuld kontrol.">
<meta property="og:locale" content="da_DK">
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:url" content="https://punktfri.dk/">
<meta name="twitter:title" content="PunktFri — Selvhosternes .dk-registrator">
<meta name="twitter:description" content="Non-profit registrator for tekniske brugere med egne navneservere. Kostpris, ingen markup, fuld kontrol.">
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
<!-- Organization Schema.org Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "PunktFri",
"description": "Non-profit registrator for .dk-domæner til selvhostere med egne navneservere",
"url": "https://punktfri.dk",
"email": "info@punktfri.dk",
"foundingDate": "2026",
"knowsAbout": ["DNS", "DNSSEC", "Domæneregistrering", ".dk domæner", "Self-hosting"],
"areaServed": {
"@type": "Country",
"name": "Denmark"
}
}
</script>
</head> </head>
<body> <body>
<header> <header>

View File

@@ -7,13 +7,13 @@
<!-- 1. Hero --> <!-- 1. Hero -->
<section class="hero"> <section class="hero">
<div class="hero-inner"> <div class="hero-inner">
<h1>Punkt<span class="accent">Fri</span></h1> <h1>Punkt<span class="accent">Fri</span> <span class="h1-subtitle">— Non-profit registrator for .dk-domæner</span></h1>
<p class="tagline">Dit .dk-domæne. Din infrastruktur. Ingen forhandler.</p> <p class="tagline">Dit .dk-domæne. Din infrastruktur. Ingen forhandler.</p>
<p class="intro"> <p class="intro">
Punktum dk kræver fra 2026 en akkrediteret registrator for alle .dk-domæner — også dem du har Punktum dk kræver fra 2026 en akkrediteret registrator for alle .dk-domæner — også dem du har
administreret selv i årtier uden at bede nogen om hjælp. Du har ikke bedt om et mellemled. administreret selv i årtier uden at bede nogen om hjælp. <strong>90-150 kr/domæne/år for noget du ikke har brug for.</strong>
Din infrastruktur virker. PunktFri er et initiativ fra selvhostere, der heller ikke vil betale Du har ikke bedt om et mellemled. Din infrastruktur virker. PunktFri er et initiativ fra selvhostere,
kommerciel pris for noget, de aldrig har haft brug for. der heller ikke vil betale kommerciel pris for noget, de aldrig har haft brug for.
</p> </p>
<a href="#tilmeld" class="hero-cta">Tilmeld din interesse →</a> <a href="#tilmeld" class="hero-cta">Tilmeld din interesse →</a>
</div> </div>
@@ -24,11 +24,12 @@
<div class="section-inner"> <div class="section-inner">
<h2>Er det dig?</h2> <h2>Er det dig?</h2>
<p> <p>
Du har kørt BIND eller PowerDNS siden før det var trendy. Du ved hvad DNSSEC er og har sat det Du har kørt BIND, PowerDNS, Knot eller tilsvarende i årevis. Du har sat DNSSEC op selv
op selv. Du har administreret dine domæner direkte hos Punktum dk i årevis og aldrig haft brug — med DS-records, signering og det hele — og det har bare virket. Du har administreret dine
for hjælp fra dem til noget som helst. Nu kræver de alligevel at du har en kommerciel domæner direkte hos Punktum dk uden nogensinde at have brug for hjælp fra dem til noget som helst.
forhandler som mellemmand. Intet ændrer sig teknisk. Det er ren administration — og det skal Nu kræver de alligevel at du har en kommerciel forhandler som mellemmand. Intet ændrer sig teknisk.
du nu betale 90150 kr/år for per domæne. Det er absurd, og det ved vi godt. Det er ren administration — og det skal du nu betale 90150 kr/år for per domæne. Det er absurd,
og det ved vi godt.
</p> </p>
<div class="target-grid"> <div class="target-grid">
<div class="target-box is-for"> <div class="target-box is-for">
@@ -129,9 +130,9 @@
<div class="timeline-item"> <div class="timeline-item">
<div class="timeline-marker is-now"></div> <div class="timeline-marker is-now"></div>
<div class="timeline-body"> <div class="timeline-body">
<span class="timeline-date">Nu — april 2026</span> <span class="timeline-date">Nu — maj 2026</span>
<h3>Direkte registrering virker stadig</h3> <h3>Direkte registrering virker stadig</h3>
<p>Har du administreret dine domæner direkte hos Punktum dk, kører det fortsat. Men det ændrer sig om kort tid.</p> <p>Har du administreret dine domæner direkte hos Punktum dk, kører det fortsat. Men det ændrer sig meget snart.</p>
</div> </div>
</div> </div>
<div class="timeline-item"> <div class="timeline-item">
@@ -231,7 +232,88 @@
<p>Punktum dk har endnu ikke offentliggjort præcis, hvad der sker — men de vil sandsynligvis tvinge en overflytning til en registrator, du ikke selv har valgt. Det er bedre at vælge sin registrator på egne præmisser og i god tid.</p> <p>Punktum dk har endnu ikke offentliggjort præcis, hvad der sker — men de vil sandsynligvis tvinge en overflytning til en registrator, du ikke selv har valgt. Det er bedre at vælge sin registrator på egne præmisser og i god tid.</p>
</div> </div>
</details> </details>
<details class="faq-item">
<summary>Hvordan sammenlignes PunktFri med Simply.com, One.com eller GratisDNS?</summary>
<div class="faq-answer">
<p>De er kommercielle udbydere med panels, support og hosting-produkter. PunktFri er en non-profit forening der kun håndterer registratorrollen. Hvis du allerede kører egne navneservere og aldrig bruger support, betaler du hos dem for features du ikke bruger.</p>
</div>
</details>
</div> </div>
<!-- FAQ Schema.org Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Er det bindende at tilmelde sig?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Nej overhovedet ikke. Tilmelding her er kun en interessetilkendegivelse. Du forpligter dig til ingenting, betaler ingenting. Vi kontakter dig én gang, når der er nyt — og ikke mere."
}
},
{
"@type": "Question",
"name": "Hvad koster PunktFri?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Det afhænger af akkrediteringsomkostninger, drift og antal medlemmer — og det kender vi ikke præcist endnu. Modellen er kostpris uden markup. Vi regner med, at det kan holdes væsentligt under de 90150 kr/år kommercielle udbydere tager."
}
},
{
"@type": "Question",
"name": "Rører I mine navneservere, DNS-records eller zoner?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Nej. Din infrastruktur er din. PunktFri håndterer udelukkende det formelle registratorforhold til Punktum dk. Vi ændrer ingenting på NS-records, zonefiler eller konfiguration. Du fortsætter præcis som nu."
}
},
{
"@type": "Question",
"name": "Hvad er en registrator egentlig?",
"acceptedAnswer": {
"@type": "Answer",
"text": "En registrator er en akkrediteret organisation, der må registrere og administrere .dk-domæner på vegne af domæneejere. Punktum dk er selve registret — den øverste myndighed. En registrator er det formelle mellemled, Punktum dk nu kræver for alle domæner. PunktFri vil fungere som registrator, men som non-profit og udelukkende for teknisk selvstyrende brugere."
}
},
{
"@type": "Question",
"name": "Hvornår er PunktFri klar?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Vi arbejder på det. Målet er at have forening stiftet og akkreditering ansøgt inden 1. juli 2026-deadlinen for nye domæner. Tilmeldingerne her er afgørende for, om vi har den kritiske masse til at gå videre — juridisk, teknisk og organisatorisk."
}
},
{
"@type": "Question",
"name": "Kan jeg overføre mine eksisterende domæner til PunktFri?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Det er præcis planen. Når PunktFri er akkrediteret, kan du overføre dine domæner fra Punktum dks direkte registrering — eller fra en anden registrator — til PunktFri. Du beholder naturligvis dine egne navneservere og al konfiguration."
}
},
{
"@type": "Question",
"name": "Hvad sker der med mine domæner, hvis jeg intet gør inden 2028?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Punktum dk har endnu ikke offentliggjort præcis, hvad der sker — men de vil sandsynligvis tvinge en overflytning til en registrator, du ikke selv har valgt. Det er bedre at vælge sin registrator på egne præmisser og i god tid."
}
},
{
"@type": "Question",
"name": "Hvordan sammenlignes PunktFri med Simply.com, One.com eller GratisDNS?",
"acceptedAnswer": {
"@type": "Answer",
"text": "De er kommercielle udbydere med panels, support og hosting-produkter. PunktFri er en non-profit forening der kun håndterer registratorrollen. Hvis du allerede kører egne navneservere og aldrig bruger support, betaler du hos dem for features du ikke bruger."
}
}
]
}
</script>
</div> </div>
</section> </section>