Mehrsprachiges Website-SEO und Hreflang Best Practices

So richten Sie mehrsprachiges SEO mit Hreflang, URL-Struktur und Lokalisierungsentscheidungen ein, ohne Duplicate Content und verschwendetes Crawl-Budget.

Globus- und Sprach-Tags-Metapher als Sketchnote, ohne Text
Auf dieser Seite

Eine zweite Sprache zu shippen fühlt sich wie ein Win an, bis die Search Console voller „Incorrect return tags“ ist und Google Englisch an Shopper in Deutschland ausliefert. Mehrsprachiges SEO geht weniger um String-Übersetzung und mehr darum, jedem Markt eine stabile URL, ein klares Sprach- oder Locale-Signal und Content zu geben, der zu dem passt, was Menschen dort tatsächlich kaufen.

Dieser Leitfaden deckt URL-Struktur-Entscheidungen ab, wie Hreflang funktioniert (inklusive Reziprozität und x-default), Sprache versus Locale, Übersetzung versus Lokalisierung, häufige Fehlermodi, Crawl-Budget, CMS-Fallen, ein Praxisbeispiel und eine Ship-Checkliste.

URL-Struktur wählen, bevor Sie irgendetwas annotieren

Hreflang zeigt nur auf URLs. Wenn diese URLs chaotisch, parameterbasiert oder halb migriert sind, retten Annotationen das Projekt nicht. Googles Leitlinien zu Multi-regionalen und mehrsprachigen Sites legen die üblichen Muster dar. Sie wählen ein Primärmuster und bleiben dabei.

Muster Beispiel Stärke Kosten
ccTLD example.de, example.fr Starkes Länder-Signal, lokales Vertrauen Separate Sites, mehr Ops, Link-Equity gesplittet
Subdomain de.example.com Klare Trennung, flexibles Hosting Schwächeres Länder-Signal als eine ccTLD
Unterverzeichnis example.com/de/ Eine Domain, geteilte Autorität, einfacheres CMS Länder-Signal hängt stärker an Content und Hreflang

Unterverzeichnisse gewinnen für die meisten Produkt- und Content-Sites, die noch Autorität auf einer Brand-Domain aufbauen. ccTLDs machen Sinn, wenn Legal Entities, Pricing oder Compliance wirklich nach Land differieren und Sie jede Site besetzen können. Subdomains sitzen in der Mitte, wenn Sie separate Stacks brauchen (zum Beispiel China-facing Origin), ohne jede TLD zu kaufen.

Sprache als Query-String vermeiden (?lang=de). Diese URLs sind leicht zu duplizieren, schwer zu teilen und ungeschickt für Analytics. Google kann sie bei korrekter Annotation trotzdem verstehen, aber Operatoren, die mit Parameter-Locales leben, bedauern es meist, wenn Filter und Campaigns kollidieren.

Das gewählte Muster an einem Ort dokumentieren, den Engineers und Übersetzer lesen. Später von /de/ zu de.example.com zu wechseln heißt volle Redirect-Map und Hreflang-Rewrite. Diese Migrationssteuer ist der Grund, warum die URL-Entscheidung vor der ersten übersetzten Seite gehört.

Drei URL-Muster für mehrsprachige Sites: ccTLD, Subdomain und Unterverzeichnis

Abbildung 1: Side-by-side ccTLD-, Subdomain- und Unterverzeichnis-Layouts für dieselbe Brand.

Wie Hreflang tatsächlich funktioniert

Hreflang sagt Google, welche URL die beabsichtigte Version für eine gegebene Sprache oder Sprach-Region-Kombination ist. Es erzeugt keine Rankings von allein. Es hilft Google, das richtige Alternate zu wählen, wenn mehrere near-matching Seiten existieren, sodass deutsche Nutzer eher die deutsche URL sehen, wenn diese ein gültiges Alternate der englischen ist.

Sie können Alternates auf drei von Google dokumentierte Weisen erklären:

  1. HTML <link rel="alternate" hreflang="..." href="..."> im Seiten-<head>
  2. HTTP-Header für Non-HTML-Dateien (PDFs und Ähnliches)
  3. XML-Sitemap-Annotationen für große Kataloge

Die meisten Marketing-Sites nutzen HTML-Tags oder Sitemap-Einträge. Große E-Commerce-Kataloge bevorzugen oft Sitemaps, damit Templates dünn bleiben. Eine Primärmethode für ein gegebenes URL-Set wählen und konsistent halten. Teilweise HTML und teilweise Sitemap-Annotationen für dasselbe Seiten-Set zu mischen, ist eine häufige Drift-Quelle.

Codes folgen BCP-47-ähnlichen Werten, die Google akzeptiert: ein Sprachcode wie en oder de, optional mit Region wie en-GB oder pt-BR. ISO-639-1-Sprachcodes nutzen und, wenn Sie eine Region brauchen, ISO-3166-1-Alpha-2-Ländercodes. Kein Shorthand wie uk für Englisch im Vereinigten Königreich erfinden (en-GB ist die übliche Wahl). Keine region-only Codes nutzen.

Jede Seite in einem Set sollte jedes Alternate listen, inklusive eines selbstreferenzierenden Eintrags für sich selbst. Wenn https://example.com/pricing/ Englisch und https://example.com/de/pricing/ Deutsch ist, brauchen beide Seiten (oder ihre Sitemap-Zeilen) en- und de-Einträge, die auf die finalen, indexierbaren URLs zeigen.

Reziproke Bestätigung zwischen Alternates

Googles Localized-Versions-Dokumentation ist explizit: Annotationen müssen von der anderen Seite bestätigt werden. Wenn Seite A auf Seite B als de zeigt, muss Seite B zurück auf Seite A als en zeigen (oder welche Sprache A auch hat). Einseitige Links werden für diese Beziehung ignoriert.

Reziprozität scheitert still, wenn ein CMS Tags nur auf der „primären“ Locale generiert, wenn ein Übersetzer eine neue Sprache published, ohne alte Seiten zu aktualisieren, oder wenn ein CDN einen alten Head cached, während die Live-Seite gewandert ist. Search Consoles International-Targeting- / Hreflang-Berichte (wo für Ihre Property verfügbar) und ein Crawl, der link[rel=alternate][hreflang] extrahiert, fangen das schneller als HTML-Augenballing.

Reziproke Hreflang-Pfeile zwischen englischen und deutschen Seiten

Abbildung 2: Jedes Alternate muss zurückzeigen. Ein einseitiger Pfeil zählt nicht als bestätigtes Paar.

x-default und der unmatched Visitor

x-default markiert die URL, die Sie wollen, wenn keiner der anderen Hreflang-Werte zu Sprache oder Regionseinstellungen des Users passt. Google beschreibt es in derselben Localized-Versions-Dokumentation als Fallback für unmatched Languages.

Typische Nutzungen:

  • Eine Sprachauswahl- oder globale Gateway-Seite
  • Ihre primäre englische (oder andere Hub-) URL, wenn Sie keinen separaten Chooser betreiben
  • Ein sorgfältig gewählter „Rest der Welt“-Storefront

x-default ist nicht „die Seite für Leute, die Englisch sprechen“. Englisch braucht weiterhin eigenes hreflang="en" (oder en-US, en-GB usw.). x-default kann auf dieselbe URL wie en zeigen, wenn das ehrlich ist. Es kann auch auf einen Chooser zeigen, der indexierbar und nützlich ist. Was es nicht tun sollte: auf Soft 404, ein Geo-IP-Redirect-Interstitial, das nie settlet, oder einen zufälligen Blogpost zeigen.

Wenn Sie per IP auto-redirecten, bevor User (oder Googlebot) eine stabile URL sehen können, kämpfen Sie gegen Usability und Crawling. Googles Multi-regional-Guidance warnt davor, sich allein auf IP zu verlassen, um Content zu zeigen. Bevorzugen Sie eine stabile URL pro Locale plus sichtbaren Sprachumschalter und lassen Sie Hreflang die Matching-Arbeit machen.

x-default als Fallback, wenn Sprache nicht zu en, de oder fr passt

Abbildung 3: x-default fängt Besucher, deren Sprache außerhalb des annotierten Sets liegt.

Sprachcodes versus Locale-Codes

de bedeutet Deutsch, unabhängig vom Land. de-DE bedeutet Deutsch wie in Deutschland. de-AT bedeutet Deutsch wie in Österreich. Das sind unterschiedliche Intents, wenn Währung, Shipping, Legal Copy oder Rechtschreibung divergieren.

Sprach-only Codes nutzen, wenn eine URL ehrlich alle Sprecher dieser Sprache bedient. Sprach-Region-Codes nutzen, wenn Seiten nach Markt differieren, auch wenn der Sprachstring gleich aussieht. Eine einzelne englische Seite für globale Leser ist oft en plus x-default. Separate UK- und US-Storefronts mit unterschiedlichen Preisen und Rechtschreibung sind meist en-GB und en-US, jeweils mit eigener URL.

Keine en-US- und en-GB-Duplikate erzeugen, die sich nur durch Flag-Icon und CDN-Edge unterscheiden. Hreflang kann keinen sinnvollen Unterschied erfinden. Wenn Seiten near-identical sind, konsolidieren oder richtig lokalisieren.

Script und regionales Chinesisch brauchen Sorgfalt. Vereinfachtes Chinesisch für Mainland-Audiences und Traditionelles Chinesisch für Taiwan oder Hongkong sind unterschiedliche Leseerfahrungen. Bevorzugen Sie distinkte URLs und präzise Codes (zh-Hans, zh-Hant oder Region-Formen, die Ihr Stack konsistent unterstützt) statt einer zh-Seite, die Scripts mischt. Was auch immer Sie wählen: dieselbe Code-Familie über HTML, Sitemaps und Sprachumschalter halten.

Nur-Sprach-Tags versus Sprach-Region-Locale-Tags

Abbildung 4: Sprachcodes decken Sprecher breit ab. Locale-Codes pinnen einen Markt, wenn Content tatsächlich differiert.

Wo Übersetzung endet und Lokalisierung beginnt

Maschinen- oder Human-Übersetzung, die Wörter tauscht, aber USD, US-Shipping-Matrices, US-Case-Studies und US-Legal-Footer stehen lässt, unterperformt selbst bei perfektem Hreflang. Lokalisierung ändert die kommerzielle Oberfläche. Währung, Steueranzeige, Zahlungsmethoden, Support-Stunden, Trust-Signale, Beispiele und regulatorischer Text brauchen einen Market Pass.

Für SEO speziell umfasst Lokalisierung auch:

  • Titles und Meta Descriptions, geschrieben dafür, wie Menschen in dieser Sprache suchen – nicht als Calque des englischen Keywords
  • Interne Links, die im Same-Language-Hub bleiben, wann immer ein Äquivalent existiert
  • Bilder und Screenshots mit lokaler UI oder Captions, wo es zählt
  • Dünne „Coming soon“-Locale-Shells überspringen, die trotzdem als volle Alternates annotiert werden

Wenn ein Markt nicht bereit ist, ihn aus Hreflang lassen, bis die Seite echt äquivalent ist. Einen Placeholder als fr zu annotieren, lehrt Google, dass das französische Alternate schwach ist.

Best Practice: Weniger Locales shippen, die kommerziell komplett sind, bevor Sie zehn halb übersetzte Ordner über die Sitemap sprühen.

Lokalisierungs-Schichten jenseits roher Übersetzung: Währung, Legal, Beispiele, Suchphrasing

Abbildung 5: Jenseits Word Swap. Währung, Proof Points und Legal Surfaces bekommen auch einen Market Pass.

Häufige Hreflang- und International-SEO-Fehler

Diese tauchen in fast jedem mehrsprachigen Crawl-Review auf.

Kaputte Reziprozität. Neue Locales launchen mit Tags, die die alten Sprachen listen, aber die alten Sprachen werden nie aktualisiert. Fix mit einer Single Source of Truth (Build-Step oder CMS-Feld), die das volle Alternate-Set auf jeder Locale regeneriert.

Falsche Codes. eng, uk, zh-CN gemischt mit zh-Hans inkonsistent, oder Region-Codes, wo Sprache intendiert war. Gegen die Code-Liste validieren, die Sie im URL-Doc standardisiert haben.

Nicht-kanonische oder nicht-indexierbare URLs annotieren. Hreflang muss auf die finale bevorzugte URL zeigen. Wenn die deutsche Seite zu Englisch canonicalisiert oder noindex liefert, lügt das Alternate-Set. Canonical und Indexierung zuerst fixen.

HTTP- und HTTPS-Mixes oder www- und non-www-Mixes. Jedes href im Alternate-Set sollte denselben Host und dasselbe Protokoll nutzen, das Sie als kanonisch gewählt haben.

Teilabdeckung. Nur die Homepage hat Hreflang, Produkt-Templates nicht. Oder nur die Sitemap hat Einträge, während HTML widerspricht. Templates abdecken, die Traffic verdienen – End-to-End.

Sprachumschalter, die Parameter-Duplikate erzeugen. Ein Switcher, der ?currency=EUR auf /de/ legt ohne Canonical-Disziplin, multipliziert Near-Duplicates und verschwendet Crawl.

Auto-Redirect-Loops. Sprache erkennen, 302 in einen anderen Ordner, dann eine andere Regel schickt den Bot woandershin. Googlebot eine 200 auf einer stabilen Locale-URL geben.

Warnung: Hreflang-Fehler werfen selten einen sichtbaren On-Page-Bug. User können weiter browsen, während Google die Alternate-Map ignoriert. Search Console und Crawl-Diffs als Monitoring-Oberfläche behandeln.

Häufige Failure-Icons: einseitige Tags, schlechte Codes, noindex-Ziele, gemischte Hosts

Abbildung 6: Die üblichen Brüche sind Reziprozität, Codes, Indexierbarkeit und Host-Inkonsistenz.

Crawl-Budget auf mehrsprachigen Sites

Jede neue Locale multipliziert die URL-Anzahl. Das kann in Ordnung sein, wenn Seiten einzigartig und verlinkt sind. Es schadet, wenn Sie dünne Templates klonen, Facettenfilter in jeder Sprache und Tag-Archive, die niemand übersetzt haben wollte.

Crawl-Budget ist kein mystischer Score. In der Praxis interessiert, ob Googlebot Zeit auf Money-URLs oder auf Junk verbringt. Mehrsprachiger Junk sieht so aus:

  • Übersetzte Filter-Kombinationen, die Tausende near-empty Listings erzeugen
  • Paginierte Archive dünner Posts in jeder Sprache
  • Staging- oder Preview-Locales, die aus dem Footer verlinkt bleiben
  • Alternates, die nach CMS-Publish-Failure 404 oder Soft-404 liefern

Low-Value-Surfaces in jeder Locale konsolidieren oder noindexen wie in einem monolingualen Audit. Sitemaps auf kanonische, 200, indexierbare URLs begrenzen, die in die Alternate-Map gehören. Beim Hinzufügen einer Sprache nur Templates hinzufügen, die Sie warten können.

Interne Links sollten Same-Locale-Pfade bevorzugen. Ein deutscher Artikel, der nur zu englischen Category-Hubs linkt, erzwingt Extra-Hops und verdünnt das Sprach-Cluster.

Crawl-Pfade, die Money-Locale-URLs gegenüber dünnen übersetzten Filtern bevorzugen

Abbildung 7: Mehr Sprachen heißen mehr URLs. Crawl auf kommerziellen Templates gegenüber übersetztem Filter-Noise bevorzugen.

CMS- und Plugin-Fallen

WordPress, Shopify, Webflow, Custom-Next.js-Apps und Enterprise-CMSs erzeugen Hreflang-Bugs unterschiedlich. Das Muster darunter ist dasselbe: Das System, das die Seite rendert, ist nicht das einzige System, das glaubt, Alternates zu besitzen.

Achten auf:

  • Zwei Plugins, die beide link rel="alternate" printen und uneinig sind
  • Ein Headless CMS, das Locale-Slugs speichert, während das Frontend Pfade in Production anders rewritet
  • Sitemap-Plugins, die jede Locale listen, während HTML-Tags eine Teilmenge listen
  • „Hreflang“-Module, die Self-References weglassen
  • Copy-to-new-locale-Workflows, die noindex oder Staging-Canonicals klonen
  • CDN- oder Reverse-Proxy-Schichten, die Bots anderes HTML als Usern ausliefern (selten absichtlich, chaotisch wenn versehentlich)

Für Website-Internationalisierung Hreflang als Release-Checklisten-Item behandeln, das Sie bei jeder größeren Änderung revalidieren. Besonders bei WordPress-Mehrsprachen-Stacks nach jedem großen Plugin- oder Theme-Update das Live-HTML einer Money-Page in jeder Locale verifizieren.

Wenn Sie Tags in der App generieren, einen CI-Check oder Crawl-Assert hinzufügen, der erwartete Alternates pro Template zählt. Manuelle Stichproben verpassen die zehnte Sprache.

CMS-Schichten, die bei Hreflang-Output konflikten: Theme, Plugin, Sitemap, CDN

Abbildung 8: Themes, Plugins, Sitemaps und CDN-HTML können jeweils eine andere Alternate-Story emittieren.

Implementierungspfad, der den Release Day überlebt

Ein dauerhafter Rollout sieht so aus.

  1. URL-Muster einfrieren und die Liste der Locales, die kommerziell ready sind.
  2. Äquivalente mappen in Spreadsheet oder Datenbank. Jede Zeile ist eine Content-Unit. Spalten sind Locale-URLs. Leere Zellen heißen „noch kein Alternate“ (aus Hreflang weglassen, bis gefüllt).
  3. HTML, HTTP oder Sitemap als Source of Truth für diese Template-Klasse wählen.
  4. Selbstreferenzierende, reziproke Tags generieren, inklusive x-default, wo Sie einen bewussten Fallback haben.
  5. Canonicals alignen, sodass jede Locale-URL zu sich selbst canonicalisiert, wenn sie indexiert werden soll.
  6. Sprachumschalter aktualisieren, sodass jede Locale zum gemappten Äquivalent linkt statt die Homepage zu raten.
  7. Sitemaps einreichen oder refreshen in der Search Console für jede Property, die Sie managen.
  8. Nach Deploy crawlen und diffen. Release failen lassen, wenn Reziprozität oder Code-Validierung auf Money-Templates fehlschlägt.
  9. Monitoren: Search Console auf Hreflang-Issues und unerwartete Country-/Language-Landing-Muster in Performance-Reports.

Googles Dokumentation zu lokalisierten Seitenversionen ist die normative Referenz für Tag-Syntax und Reziprozität. Third-Party-Validatoren helfen, und die offiziellen Regeln entscheiden weiterhin, was Google akzeptiert.

Implementierungsschritte vom URL-Freeze bis zur Crawl-Validierung

Abbildung 9: Zuerst Äquivalente mappen, reziproke Tags generieren, dann nach Deploy mit Crawl validieren.

Praxisbeispiel: SaaS-Site fügt Deutsch und Französisch hinzu

Acme shippt ein B2B-Analytics-Produkt auf https://www.acme.example/ mit Blog und Pricing auf Englisch. Marketing will Deutsch und Französisch für EU-Expansion. Engineering bevorzugt eine Domain. Sie wählen Unterverzeichnisse: /de/ und /fr/.

Sie übersetzen nicht jedes alte Blog-Tag-Archiv. Sie lokalisieren Homepage, Pricing, Product Overview, Docs-Entry-Points und die zwanzig Posts, die noch Pipeline verdienen. Legal schreibt einen EU-ready Privacy-Addendum. Pricing zeigt EUR mit MwSt.-Hinweisen, wo nötig. Case Studies tauschen EU-Logos ein, für die sie Nutzungserlaubnis haben.

Äquivalent-Map (vereinfacht):

Unit en de fr
Home / /de/ /fr/
Pricing /pricing/ /de/pricing/ /fr/pricing/
Product /product/ /de/product/ /fr/product/

Jede dieser sechs URLs (plus Self) emittiert en, de, fr und x-default, das auf die englische Home oder einen kleinen Region-Chooser zeigt, den sie indexierbar halten. Blogposts, die nur auf Englisch existieren, lassen de/fr weg, bis übersetzt. Sie zeigen nie deutsche Home auf eine französische Pricing-URL.

Woche eins nach Launch findet ein Crawl, dass englisches Pricing die neuen Alternates noch vermisst, weil die Caching-Schicht einen alten Head ausgeliefert hat. Sie purgen, re-crawlen und bestätigen Reziprozität. Die Search Console stoppt nach Processing, Return-Tag-Errors auf diesen URLs zu melden.

Sie messen Erfolg als deutsche und französische Queries, die auf /de/- und /fr/-Money-Pages landen. Indexed-URL-Count allein ist hier eine schwache Success-Metrik.

SaaS-Site fügt /de/ und /fr/ mit gemappten Home-, Pricing- und Product-URLs hinzu

Abbildung 10: Acme mappt wenige komplette Äquivalente, shippt reziproke Tags und überspringt dünne Archiv-Übersetzung.

Mehrsprachige SEO-Checkliste

Nutzen Sie das, bevor Sie das Projekt für done erklären.

  • Ein dokumentiertes URL-Muster (ccTLD, Subdomain oder Unterverzeichnis) konsistent genutzt
  • Nur kommerziell ready Locales sind live und annotiert
  • Jede annotierte URL liefert 200, ist indexierbar und self-canonicalisiert, wenn sie ranken soll
  • Hreflang-Codes passen zu Ihrer Sprach- vs. Locale-Policy (de vs. de-DE usw.)
  • Volles Alternate-Set auf jeder Member-Page oder Sitemap-Zeile, inklusive Self-References
  • Reziproke Bestätigung über das Set
  • x-default zeigt auf einen absichtlichen Fallback
  • Sprachumschalter linkt zu echten Äquivalenten ohne Parameter-Duplikate zu spawnen
  • Sitemaps listen nur kanonische Locale-URLs, die Sie gecrawlt haben wollen
  • Dünne übersetzte Filter, Tags und Staging-Locales sind aus der Alternate-Map
  • Post-Deploy-Crawl validiert Tags auf Money-Templates
  • Search-Console-Properties und Sitemaps für die Hosts aktualisiert, die Sie managen

Checklisten-Clipboard für mehrsprachiges SEO und Hreflang-Launch-Bereitschaft

Abbildung 11: Launch-Bereitschaft deckt URLs, Codes, Reziprozität, Indexierbarkeit und Post-Deploy-Validierung ab.

Häufig gestellte Fragen

Brauche ich Hreflang, wenn ich nur eine Sprache habe?

Nein. Hreflang ist für Alternate-Sprach- oder Locale-Versionen desselben Contents. Eine einsprachige Site sollte sich auf saubere Canonicals und Crawl-Zugang konzentrieren. Dekoratives Hreflang, das nirgendwo Nützliches hinzeigt, erzeugt nur Monitoring-Noise.

Kann Hreflang Duplicate Content allein fixen?

Es hilft Google, das richtige Alternate unter gültigen Versionen zu wählen. Es ersetzt keine Canonical-Disziplin und rehabilitiert keine dünnen kopierten Seiten. Duplikate und Qualität zuerst fixen, dann echte Äquivalente annotieren.

Sollte jeder Blogpost in jeder Sprache existieren?

Nur wenn Sie sie warten. Teilabdeckung ist in Ordnung. Die Sprachen annotieren, die für diese Unit existieren, und den Rest von der Alternate-Liste lassen, bis sie shippen.

Ist eine ccTLD für internationales SEO immer besser?

Nein. Eine ccTLD ist ein starkes Länder-Signal und oft ein Trust-Signal für lokale User, kostet aber mehr im Betrieb und splittet Autorität, es sei denn, Sie investieren in jede Property. Viele globale Brands kommen mit Unterverzeichnissen plus korrektem Hreflang gut zurecht. Aus Legal-, Hosting- und Resourcing-Constraints wählen, nicht aus einer Faustregel aus einem Forum-Thread.

Wohin gehört Hreflang bei einem großen Katalog?

XML-Sitemaps skalieren besser bei Zehntausenden SKUs. Sitemap-Einträge mit kanonischen Produkt-URLs synchron halten. HTML spot-checken, wenn Ihr Stack auch Head-Tags printet, und Konflikte entfernen.

Was ist der Unterschied zwischen Hreflang und einem Content-Language-Meta-Tag?

Hreflang mappt Alternate-URLs für Sprachen und Regionen für Google Search. Ein content-language-Meta-Tag ist kein Ersatz für diese Map. Googles Localized-Versions-Mechanismus für Alternates folgen.

Abschluss

Mehrsprachiges SEO hält zusammen, wenn URLs stabil sind, Locales echte Produkte sind und Hreflang eine reziproke Map dieser URLs ist. Teams, die kämpfen, haben meist zuerst annotiert und später lokalisiert – oder ein Plugin Tags emittieren lassen, die niemand nach der dritten Sprache revalidiert hat.

Wenn Sie einen Locale-Rollout planen oder eine bestehende Alternate-Map bereinigen, erreichen Sie mich über das Kontaktformular.