Eine Kontaktseite pro Person, die per QR-Code aufgerufen wird: am Messestand, beim Netzwerktreffen, vom Sperrbildschirm des Smartphones oder von der gedruckten Karte. Ein Tipp auf „Kontakt speichern“ übernimmt alle Daten samt Foto ins Adressbuch. Ohne App, ohne Abo bei einem Visitenkarten-Dienst, auf dem eigenen Webspace.
Beispiel: team.falk.plus/jens/
https://team.example.de/max/). Ändern sich Telefonnummer oder Texte, wird nur die Seite neu erzeugt. Druck, Sperrbildschirm und Wallet-Karte bleiben gültig..vcf) mit Name, Rolle, Firma, Telefon, E-Mail, Adresse, Website, LinkedIn und Foto. Android und iPhone öffnen sie direkt mit „Kontakt hinzufügen“.?utm_source=visitenkarte-max&utm_medium=visitenkarte). Anfragen, die über die Karte kommen, sind in Webanalyse und Marketing-Automatisierung (bei uns Mautic) eindeutig erkennbar. Mehr dazu unter Anfragen aus der Signatur erkennen.Die Seiten sind reines HTML: kein CMS, keine Datenbank, nichts, was gepflegt oder abgesichert werden muss. Erzeugt werden sie von einem kleinen Python-Skript aus einer Datendatei:
{
"personen": [
{
"kuerzel": "max",
"vorname": "Max",
"nachname": "Muster",
"rolle": "Inhaber · IT-Partner für …",
"mobil": "+49 …",
"email": "max@example.de",
"linkedin": "https://www.linkedin.com/in/…"
}
]
}
Das Skript erzeugt je Person:
index.html: die Kontaktseitevorname-nachname.vcf: die vCard (Version 3.0, mit Foto)qr.svg / qr.png: der QR-Code, beliebig skalierbar für den Drucksperrbildschirm.png: Hintergrundbild fürs Smartphone mit großem QR-Codecatima.png: Kartenbild für die Wallet-App Catima (Android)
Die Kürzel in der Adresse (/max/) werden nie geändert, denn sie stehen im QR-Code.
BEGIN:VCARD VERSION:3.0 N:Muster;Max;;; FN:Max Muster ORG:Beispiel GmbH TITLE:Inhaber · IT-Partner für Onlinehandel + DMS + Buchhaltung TEL;TYPE=WORK,VOICE:+49 … EMAIL;TYPE=INTERNET,WORK:max@example.de URL:https://example.de/ PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQ… END:VCARD
\, und \;, sonst wird z. B. die Rolle beim Komma abgeschnitten..vcf als text/vcard ausliefern, sonst bieten Smartphones nur einen Download an.TITLE ändern. Sonst landet die alte Rolle im Adressbuch der Kunden. Deshalb kommen bei uns Seite und vCard aus derselben Datendatei.<meta name=„robots“ content=„index, follow“>, <link rel=„canonical“> und eine offene robots.txt. Dann erscheint die Karte auch in KI-gestützten Suchen.og:title, og:description, og:image) sorgen für eine ordentliche Vorschau, wenn die Adresse in WhatsApp, Signal oder LinkedIn geteilt wird.X-Robots-Tag und in der robots.txt.
Für nginx (z. B. unter ISPConfig als „nginx Directives“; eine .htaccess wirkt dort nicht):
# Kontaktdateien mit richtigem Typ, aber nicht in Suchmaschinen location ~* \.vcf$ { types { } default_type "text/vcard; charset=utf-8"; add_header X-Robots-Tag "noindex, nofollow" always; }
Datendatei, Skript, Fotos und Schrift liegen in einem Git-Repository (bei uns: eigene Gitea-Instanz). Der Ablauf bei einer Änderung:
git pull und den erzeugten Ordner ins Webverzeichnis spiegeln (rsync --delete).Wichtig: Der erzeugte Ordner wird nie von Hand geändert, weder lokal noch auf dem Server. Der nächste Lauf überschreibt sonst alles. Und: Die Subdomain bekommt ein eigenes Webverzeichnis, nicht unterhalb der Hauptwebsite. Website-Generatoren wie Publii löschen beim Synchronisieren fremde Dateien.