Webseite für den Chatbot-Crawler optimieren
Die Qualität der Chatbot-Antworten hängt direkt davon ab, wie gut der Crawler die Inhalte deiner Webseite verstehen kann. Mit den folgenden Massnahmen hilfst du dem Crawler, Inhalte zuverlässig zu erkennen, korrekt einzuordnen und präziser zu indexieren.
1. Semantische Struktur und Überschriftenhierarchie
Der Crawler analysiert die HTML-Struktur der Seite, um den relevanten Hauptinhalt von Navigation, Footer, Sidebars und anderen Randelementen zu trennen. Der Hauptinhalt sollte in einem semantisch eindeutigen Element stehen – idealerweise <main> oder <article>:
<body>
<header>...</header>
<nav>...</nav>
<main>
<article>
<!-- Dieser Inhalt wird indexiert -->
</article>
</main>
<footer>...</footer>
</body>
Der Crawler erkennt und entfernt automatisch Navigation, Footer, Cookie-Banner, Social-Media-Widgets und Werbung. Liegt der Hauptinhalt jedoch nicht in einem klar abgegrenzten Element, steigt das Risiko, dass irrelevante Inhalte mitindexiert oder relevante Inhalte übersehen werden.
Innerhalb des Hauptbereichs teilt der Crawler den Inhalt anhand von Überschriften in einzelne Kapitel auf. Jedes Kapitel wird separat indexiert und beim Chatbot als eigene Antworteinheit verwendet. Da der Crawler jede URL als eigene Wissenseinheit behandelt, sind Seiten, die genau ein Thema abdecken, am effektivsten.
Empfehlung:
- Jede Seite sollte mit einer klaren H1 beginnen (Seitenthema)
- Unterabschnitte mit H2, H3, H4 strukturieren
- Jeder Abschnitt sollte thematisch geschlossen sein – d.h. alle Infos zu einem Unterthema zusammen, nicht verteilt
2. URL-Struktur und Hierarchie
Der Crawler verwendet die URL-Struktur, um bestimmte Bereiche der Website gezielt ein- oder auszuschliessen. Eine klare, hierarchische URL-Struktur gibt die Möglichkeit, einzelne Bereiche unterschiedlich zu behandeln – ohne Eingriffe am Seiteninhalt.
| Bereich | Konfiguration | Beispiel-URLs |
|---|---|---|
| Interne Seiten | /intern/* komplett ignorieren | /intern/protokolle |
| Nur aktuelle Blog-Posts | /blog/* mit Altersfilter 12 Monate | /blog/2024/mein-artikel |
| Nur bestimmte Sprache | /de/* indexieren, /fr/* und /it/* ignorieren | /de/produkte |
Empfehlung für die URL-Gestaltung:
- Thematische Bereiche in der URL abbilden:
/produkte/,/blog/,/news/,/support/ermöglichen eine feingranulare Steuerung - Datum im Pfad bei zeitkritischen Inhalten:
/blog/2024/03/artikel-titelerlaubt es, alte Inhalte pauschal per URL-Muster auszuschliessen – unabhängig davon, ob ein<time>-Tag vorhanden ist - Canonical URLs setzen: Wenn Inhalte unter mehreren URLs erreichbar sind (z.B. mit/ohne Trailing Slash, mit URL-Parametern wie
?sort=price), verhindert eincanonical-Tag, dass derselbe Inhalt mehrfach indexiert wird:
<link rel="canonical" href="https://www.example.ch/produkte/software/" />
Diese Konfigurationen (ausgeschlossene URLs, Altersfilter pro Bereich) werden im Chatbot-CMS vorgenommen – du musst dafür nur sicherstellen, dass deine URL-Struktur die inhaltliche Hierarchie korrekt widerspiegelt.
3. Aussagekräftige Meta-Tags
Der Crawler liest Meta-Tags aus und verwendet sie als zusätzlichen Kontext für die Suche.
<title>Präziser Seitentitel</title>
<meta
name="description"
content="Kurze, inhaltliche Zusammenfassung der Seite"
/>
<meta name="keywords" content="relevante, schlagworte" />
4. Breadcrumbs implementieren
Breadcrumbs werden explizit extrahiert und helfen dem Chatbot zu verstehen, in welchem Kontext eine Seite steht (z.B. «Produkte → Kategorie X → Produkt Y»). Der Crawler erkennt:
- JSON-LD
BreadcrumbList(bevorzugt) - HTML-Elemente mit Klassen
.breadcrumb,.breadcrumbsodernav[aria-label="breadcrumb"]
5. Schema.org / JSON-LD Auszeichnung
Schema.org ist ein standardisiertes Vokabular zur semantischen Auszeichnung von Webseiteninhalten. Mit JSON-LD (JavaScript Object Notation for Linked Data) lässt sich dieses Vokabular als strukturiertes Datenpaket direkt in den HTML-<head> einbetten – ohne das visuelle Layout der Seite zu beeinflussen.
Der Crawler liest diese strukturierten Daten aus und nutzt sie als zusätzlichen Kontext beim Indexieren. Das verbessert die Qualität der Suchergebnisse, weil der Chatbot Inhalte nicht nur als Text, sondern auch inhaltlich einordnen kann.
Was der Crawler konkret daraus gewinnt:
| Feld | Schema.org-Property | Nutzen für den Chatbot |
|---|---|---|
| Seitentyp | @type (z.B. Article, FAQPage, Product) | Erkennt, um welche Art von Inhalt es sich handelt |
| Kategorie / Thema | articleSection, about | Ordnet den Inhalt thematisch ein |
| Autor | author | Wird als Metadaten gespeichert |
| Veröffentlichungsdatum | datePublished | Wird für die Altersfilterung genutzt |
| Breadcrumb-Pfad | BreadcrumbList | Gibt den Seitenkontext (z.B. Produkte → Software) |
| FAQ-Inhalte | FAQPage + Question/Answer | Frage-Antwort-Paare werden direkt als Wissenseinheiten erkannt |
Beispiel für eine Produktseite:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Produktname",
"description": "Kurze Beschreibung des Produkts",
"category": "Softwarelösungen",
"brand": { "@type": "Brand", "name": "Firmenname" }
}
</script>
Beispiel für eine FAQ-Seite:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Wie lange dauert die Lieferung?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Die Lieferung dauert in der Regel 2–3 Werktage."
}
}
]
}
</script>
JSON-LD ist von Google empfohlen, wird von allen modernen CMS-Systemen unterstützt und hat keinen Einfluss auf das Seitenlayout.
6. Irrelevante Bereiche ausblenden
Bereiche, die nicht indexiert werden sollen (z.B. Werbebanner, Disclaimers), können mit dem Attribut data-bubble-chat-exclude markiert werden.
<div data-bubble-chat-exclude>Dieser Inhalt wird nicht indexiert</div>
Falls du keinen Zugriff auf den HTML-Quellcode hast, kannst du im CMS alternativ einen oder mehrere CSS-Exclude-Selektoren konfigurieren. Damit werden alle Elemente, die einem der Selektoren entsprechen, beim Indexieren automatisch ausgeblendet – ohne Änderungen an der Webseite selbst.
7. XML-Sitemap pflegen
Je nach Konfiguration im CMS crawlt Bubble Chat deine Webseite entweder rekursiv ab einer Start-URL oder indexiert direkt die Seiten aus einer XML-Sitemap.
Die Sitemap-basierte Indexierung ist die zuverlässigere Variante: Der Crawler weiss genau, welche Seiten existieren, und ist nicht darauf angewiesen, alle Inhalte über Links zu entdecken. So werden auch Seiten gefunden, die nur schwach verlinkt sind.
8. JavaScript und dynamische Inhalte
Der Crawler verwendet einen echten Browser (Chromium), der JavaScript vollständig ausführt. Dynamisch gerenderte Inhalte werden also grundsätzlich indexiert.
Was trotzdem problematisch sein kann:
- Inhalte hinter Interaktionen (Akkordeons, Tabs, «Mehr anzeigen»): Diese werden nicht automatisch aufgeklappt. Wichtige Inhalte sollten daher entweder sichtbar sein oder bereits im HTML-Quellcode stehen (auch wenn sie visuell versteckt sind).
- Langsam ladende Inhalte: Der Crawler wartet maximal 10 Sekunden auf das Erscheinen von Inhalten. API-Calls, die länger dauern, können dazu führen, dass Inhalte nicht erfasst werden.
- Inhalte hinter Login: Passwortgeschützte Bereiche werden nicht indexiert.
Empfehlung: Relevanter Inhalt sollte beim Laden der Seite direkt im DOM vorhanden sein – unabhängig davon, ob er durch JavaScript gerendert wurde.
9. Veröffentlichungsdatum für Altersfilterung
Der Crawler erkennt automatisch das Veröffentlichungsdatum einer Seite und kann Seiten, die zu alt sind, vom Indexieren ausschliessen. Damit der Chatbot nur aktuelle Inhalte liefert, muss das Datum auf der Seite maschinenlesbar vorhanden sein.
Der Crawler erkennt das Datum aus folgenden Quellen (in dieser Reihenfolge):
<!-- Bevorzugt: <time>-Element mit datetime-Attribut -->
<time datetime="2024-03-15">15. März 2024</time>
<!-- Meta-Tags -->
<meta property="article:published_time" content="2024-03-15T10:00:00Z" />
<meta name="pubdate" content="2024-03-15" />
<meta itemprop="datePublished" content="2024-03-15" />
Wichtig: Das Datum muss in einem standardisierten Format vorliegen (ISO 8601, z.B. 2024-03-15 oder 2024-03-15T10:00:00Z). Rein textuelle Datumsangaben wie «15. März 2024» werden nicht zuverlässig erkannt.
Empfehlung: Das <time datetime="..."> -Attribut ist die zuverlässigste Methode und gleichzeitig semantisch korrekt für Screenreader und SEO.
<time datetime="2024-03-15">15. März 2024</time>
Wenn Seiten kein Datum tragen (z.B. statische Infoseiten), werden sie unabhängig vom konfigurierten Altersfilter immer indexiert.
10. Kein relevanter Inhalt in iframes
Inhalte, die in <iframe>-Elementen eingebettet sind, werden vom Crawler nicht indexiert. Wichtige Inhalte müssen direkt im HTML-Quellcode der Seite stehen – nicht als eingebettetes Dokument oder Widget.
11. Bot-Erkennung und Sperren verhindern (HTTP 403 / 429)
Der Crawler verhält sich wie ein Browser (Puppeteer/Chromium) und respektiert Standard-HTTP-Mechanismen. Trotzdem kann es vorkommen, dass Firewalls oder Bot-Erkennungssysteme den Crawler blockieren.
Was der Crawler bereits macht:
- Bei HTTP 429 (Too Many Requests) wartet er automatisch und versucht es bis zu 3-mal erneut (inkl. Auswertung des
Retry-After-Headers) - Seiten werden mit einem echten Chromium-Browser gerendert, was viele einfache Bot-Erkennungen umgeht
Was auf der Website-Seite helfen kann:
IP-Whitelist (empfohlen)
Die IP-Adresse des Crawlers beim Hosting-Provider oder in der Firewall/WAF freischalten. Dies ist die zuverlässigste Lösung. Die aktuelle Crawler-IP kann bei uns angefragt werden.
Custom Headers konfigurieren (als Workaround)
Im CMS können benutzerdefinierte HTTP-Header konfiguriert werden, z.B. ein Authorization-Header oder ein geheimer Token, den die Firewall als vertrauenswürdig akzeptiert:
X-Crawler-Token: dein-geheimer-token