# AI People Also Ask — Vollständige Dokumentation (dfaipaa)

> Überblick AI People Also Ask (technischer Slug: dfaipaa) erfasst die Fragen, die Ihre Kunden tatsächlich bei Google stellen — die „People Also Ask"-Blöcke —, generiert die Antworten mit der KI…

- Seite: <https://www.datafirefly.com/de/documentation/dfaipaa/>
- Sprache: de
- Aktualisiert am: 2026-10-10
- Weitere Sprachen: [fr](https://www.datafirefly.com/documentation/dfaipaa/index.md), [en](https://www.datafirefly.com/en/documentation/dfaipaa/index.md), [es](https://www.datafirefly.com/es/documentation/dfaipaa/index.md), [it](https://www.datafirefly.com/it/documentation/dfaipaa/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfaipaa/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfaipaa/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfaipaa/index.md)
- Index: <https://www.datafirefly.com/de/documentation/llms.txt>

## Überblick

**AI People Also Ask** (technischer Slug: `dfaipaa`) erfasst die Fragen, die Ihre Kunden tatsächlich bei Google stellen — die „People Also Ask"-Blöcke —, generiert die Antworten mit der KI Ihrer Wahl und veröffentlicht eine schema.org-ausgezeichnete FAQ auf Ihren Produkt- und Kategorieseiten.

Das Modul industrialisiert eine vollständige Pipeline in vier Schritten:

- **Scraping** — Erfassung der PAA-Fragen zu Ihren Ziel-Keywords über SerpApi, DataForSEO oder manuelle Eingabe.
- **KI-Generierung** — Formulierung der Antworten über Mistral, OpenAI oder Anthropic, mit konfigurierbarem Ton und Markenstimme.
- **Redaktioneller Workflow** — Prüfung, Zuweisung zu Produkten und Kategorien, Veröffentlichung (manuell oder automatisch).
- **Veröffentlichung** — barrierefreies FAQ-Akkordeon im Shop plus FAQPage JSON-LD für Google und generative Engines.

**Hinweis** — Es ist kein `composer install` erforderlich. Ein minimaler PSR-4-Autoloader ist im Modul unter dem Namespace DataFirefly Dfaipaa enthalten.

## Voraussetzungen

- PrestaShop 8.0.0 → 9.99.99
- PHP 8.1, 8.2 oder 8.3
- MySQL 5.7 / MariaDB 10.4 oder höher
- Ein API-Schlüssel für mindestens einen KI-Anbieter (Mistral, OpenAI oder Anthropic)
- Optional: ein SerpApi-Schlüssel oder ein DataForSEO-Konto zur Automatisierung des Scrapings
- Ausgehende HTTPS-Verbindungen (cURL) müssen von Ihrem Hoster erlaubt sein

**Tipp** — Der manuelle Eingabemodus ermöglicht die Nutzung des Moduls ohne jedes Scraping-Abonnement: Sie geben die Fragen selbst ein, die KI übernimmt die Antworten.

## Installation

1. Laden Sie das ZIP `dfaipaa.zip` aus Ihrem DataFirefly-Konto herunter.
2. Gehen Sie im PrestaShop-Backoffice zu **Module › Modul-Manager › Modul hochladen**.
3. Ziehen Sie das ZIP hinein, warten Sie auf die Bestätigung und klicken Sie auf **Installieren**.
4. Ein neues Menü **AI People Also Ask** erscheint in der linken Spalte mit drei Reitern: Konfiguration, Keywords, Fragen.

Die Installation legt 4 Tabellen an (Präfix `ps_dfaipaa_`), setzt die Standardkonfiguration und installiert 4 Admin-Reiter (ein Elternteil plus drei Kinder) mit in FR, EN, ES, DE, IT und NL lokalisierten Beschriftungen.

**Wichtig** — Wenn Ihr Entpackungswerkzeug `vendor/`-Ordner überspringt, fehlt der Autoloader und das Modul wirft einen „Class not found"-Fehler. Entpacken Sie mit `unzip` oder laden Sie das ZIP direkt über das Backoffice hoch, das die Struktur korrekt verarbeitet.

## Konfiguration — Scraping

Reiter **AI People Also Ask › Konfiguration**, erster Abschnitt.

| Feld | Beschreibung | Standard |
| --- | --- | --- |
| Anbieter | `serpapi`, `dataforseo` oder `manual` | `serpapi` |
| API-Schlüssel | SerpApi-Schlüssel oder DataForSEO-Zugangsdaten im Format `login:password` | leer |
| Sprache | Zweibuchstabiger ISO-Code für die Google-Abfrage | `fr` |
| Land | Zweibuchstabiger ISO-Code des Zielmarkts | `FR` |
| Max. Fragen pro Keyword | Grenze pro Scraping-Vorgang | `8` |
| Aktualisierungsintervall | In Tagen, danach gilt ein Keyword als veraltet | `30` |

### SerpApi-Schlüssel erhalten

Erstellen Sie ein Konto auf **serpapi.com**. Der kostenlose Plan bietet 100 Anfragen pro Monat, also etwa 100 gescrapte Keywords. Den Schlüssel finden Sie im Dashboard unter „Your Account". Das Modul fragt den Google-Such-Endpunkt ab und nutzt den Block `related_questions` der Antwort.

### DataForSEO-Konto erhalten

Erstellen Sie ein Konto auf **dataforseo.com**. Sie erhalten ein Benutzername-/Passwort-Paar, das Sie im Feld API-Schlüssel als `login:password` eintragen (das Modul übernimmt die HTTP-Basic-Authentifizierung). DataForSEO rechnet nutzungsbasiert ab, was bei hohen Volumina besser passt. Das Modul verwendet den Endpunkt SERP Google organic live advanced und extrahiert die `people_also_ask`-Elemente.

Das Mapping der Standortcodes ist für folgende Märkte integriert: FR, BE, CH, LU, CA, US, UK, IE, ES, PT, IT, DE, AT, NL, PL, BR und MX.

### Manueller Eingabemodus

Wählen Sie `manual`, um alle externen Aufrufe zu deaktivieren. Sie fügen die Fragen dann selbst im Reiter Fragen hinzu; die KI-Generierung bleibt voll funktionsfähig.

## Konfiguration — Künstliche Intelligenz

Zweiter Abschnitt des Reiters Konfiguration.

| Feld | Beschreibung | Standard |
| --- | --- | --- |
| Anbieter | `mistral`, `openai` oder `anthropic` | `mistral` |
| Modell | Modellkennung beim Anbieter | `mistral-large-latest` |
| API-Schlüssel | Schlüssel des gewählten Anbieters | leer |
| Temperatur | 0.0 bis 1.0 — niedriger bedeutet faktentreuer | `0.3` |
| Max. Tokens | Maximale Länge der generierten Antwort | `500` |
| Tonalität | Freitext: fachkundig, pädagogisch, verkaufsorientiert, herzlich… | leer |
| Markenstimme | Zusätzliche Anweisungen zur Angleichung des Redaktionsstils | leer |
| Auto-Veröffentlichung | Veröffentlicht jede generierte Antwort automatisch | deaktiviert |

### Empfohlene Modelle

- **Mistral** — `mistral-large-latest` für Qualität, `mistral-small-latest` zur Kostensenkung bei großen Mengen.
- **OpenAI** — `gpt-4o-mini` bietet ein hervorragendes Preis-Leistungs-Verhältnis; `gpt-4o` für anspruchsvolle technische Kataloge.
- **Anthropic** — `claude-sonnet-4-6` für nuancierte, gut strukturierte Antworten.

### Dem Modell auferlegte Vorgaben

Das Modul erstellt einen strikten System-Prompt, unabhängig vom Anbieter: Antworten von 60 bis 120 Wörtern, ausschließlich einfaches HTML (Absätze, fett, kursiv, Listen), kein Markdown, keine Überschriften-Tags, keine Skripte. Der Entitätskontext (Name und Beschreibung des Produkts oder der Kategorie, auf 1200 Zeichen gekürzt) sowie das Ursprungs-Keyword werden eingespeist, um die Antwort zu verankern. Das ursprüngliche Google-Snippet wird als Referenz mitgegeben, mit der ausdrücklichen Anweisung umzuformulieren — niemals zu kopieren.

**Tipp** — Falls ein kleineres Modell dennoch Markdown zurückgibt, senken Sie die Temperatur auf 0.2 und ergänzen Sie „nur HTML, kein Markdown" im Feld Markenstimme.

## Konfiguration — Anzeige

Dritter Abschnitt des Reiters Konfiguration.

| Feld | Beschreibung | Standard |
| --- | --- | --- |
| Produktmodus | `tab` (Reiter) oder `footer` (Block am Seitenende) | `tab` |
| Auf Produkten aktivieren | Zeigt die FAQ auf Produktseiten | aktiviert |
| Auf Kategorien aktivieren | Zeigt die FAQ am Ende von Kategorieseiten | aktiviert |
| Reitertitel | Lokalisierte Beschriftung des Produktreiters | „Häufig gestellte Fragen" |
| Produkttitel | Blocktitel im Footer-Modus | lokalisiert |
| Kategorietitel | Titel des Kategorieblocks | lokalisiert |
| JSON-LD ausgeben | Fügt die FAQPage-Auszeichnung ein | aktiviert |

Im Modus `tab` stützt sich das Modul auf den nativen Mechanismus `ProductExtraContent` von PrestaShop: Die FAQ erscheint als Reiter neben „Beschreibung" und „Produktdetails", ohne Template-Überschreibung.

## Redaktioneller Workflow

### Schritt 1 — Keywords hinzufügen

Reiter **Keywords**. Fügen Sie Ihre Liste in das Textfeld ein, ein Keyword pro Zeile, und bestätigen Sie. Duplikate werden automatisch ignoriert (das Hinzufügen ist idempotent pro Keyword, Sprache und Shop).

Wählen Sie Keywords mit Kaufabsicht: „Kaffeevollautomat", „bester Kaffee ganze Bohne", „Kaffeemaschine entkalken". Vermeiden Sie reine Markenabfragen, die selten PAA-Blöcke auslösen.

### Schritt 2 — Scrapen

Zwei Möglichkeiten:

- **Scrapen** — Einzelbutton in jeder Keyword-Zeile, praktisch zum Testen der Konfiguration.
- **Alle veralteten scrapen** — verarbeitet in Stapeln von 20 die Keywords, deren letzte Erfassung das Aktualisierungsintervall überschreitet.

Jede erfasste Frage wird mit einem Eindeutigkeits-Hash gespeichert (Frage + Sprache + Shop): Ein erneutes Scrapen erzeugt nie Duplikate, sondern aktualisiert lediglich das Datum der letzten Erfassung.

### Schritt 3 — Antworten generieren

Reiter **Fragen**. Filtern Sie nach Status `pending`, wählen Sie die Fragen über die Kontrollkästchen aus und starten Sie die Massenaktion **Generieren**. Auch ein Einzelbutton steht in jeder Zeile bereit.

Der Entitätskontext wird aus der ersten Zuweisung der Frage aufgebaut. Für bessere Antworten weisen Sie die Frage einem Produkt oder einer Kategorie zu, _bevor_ Sie generieren: Die KI verfügt dann über Name und Beschreibung der Entität.

### Schritt 4 — Prüfen und zuweisen

Klicken Sie auf eine Frage, um das Bearbeitungsformular zu öffnen. Sie können:

- die HTML-Antwort im Rich-Editor korrigieren;
- die Frage einem oder mehreren Produkten und Kategorien zuweisen (N-zu-N-Beziehung);
- die Zuweisungen umsortieren, um die Reihenfolge im Akkordeon zu steuern;
- eine themenfremde Frage ablehnen (Status `rejected`, bleibt in der Datenbank, wird aber nie angezeigt).

### Schritt 5 — Veröffentlichen

Setzen Sie den Status auf `published`. Die FAQ erscheint sofort im Shop, zusammen mit ihrem JSON-LD.

Ist die Option **Auto-Veröffentlichung** aktiviert, verschmelzen die Schritte 4 und 5: Die Generierung veröffentlicht direkt. Praktisch für eine vollautomatische Pipeline, empfehlenswert nur bei Katalogen, in denen die menschliche Durchsicht nicht kritisch ist.

## Status der Fragen

| Status | Bedeutung | Im Shop sichtbar |
| --- | --- | --- |
| `pending` | Frage erfasst, noch keine KI-Antwort | Nein |
| `generated` | Antwort generiert, Freigabe ausstehend | Nein |
| `published` | Freigegeben und veröffentlicht | Ja |
| `rejected` | Manuell verworfen | Nein |

## Anzeige im Shop

Das Akkordeon basiert auf den nativen HTML-Elementen `details` und `summary`, was Folgendes garantiert:

- funktionierende Tastaturnavigation ohne JavaScript;
- von Suchmaschinen indexierbare Inhalte, auch im zugeklappten Zustand;
- Kompatibilität mit allen modernen Browsern.

Das erste Element ist standardmäßig geöffnet. Eine schlanke CSS-Datei wird geladen und lässt sich vollständig aus Ihrem Child-Theme überschreiben. Alle Klassen verwenden das Präfix `dfaipaa-faq`, um Kollisionen zu vermeiden.

### JavaScript-Events

Das Frontend-Skript sendet zwei benutzerdefinierte Events, die Sie an Ihr Analysewerkzeug anbinden können:

```
document.addEventListener('dfaipaa:open', function (e) {
  // e.detail.question, e.detail.index, e.detail.type, e.detail.entityId
  gtag('event', 'faq_open', { question: e.detail.question });
});

document.addEventListener('dfaipaa:close', function (e) {
  console.log('FAQ geschlossen:', e.detail.question);
});
```

Die Datei `views/js/front.js` enthält außerdem eine Konstante `SINGLE_OPEN` (standardmäßig `false`): Setzen Sie sie auf `true`, damit jeweils nur ein Panel geöffnet ist.

### Deep-Linking

Ein Anker der Form `#dfaipaa-q-123` öffnet automatisch die passende Frage und scrollt die Seite dorthin. Praktisch, um eine bestimmte Antwort aus einer E-Mail oder einem Support-Ticket heraus zu teilen.

## FAQPage JSON-LD-Auszeichnung

Bei jedem Aufruf einer Produkt- oder Kategorieseite mit mindestens einer veröffentlichten Frage fügt das Modul einen JSON-LD-Block direkt vor dem Schließen des Dokumentkörpers ein (Hook `displayBeforeBodyClosingTag`).

Ausgegebene Struktur: ein `FAQPage`-Knoten, ein `mainEntity`-Array und für jeden Eintrag ein `Question`-Knoten mit einer `acceptedAnswer` vom Typ `Answer`. Der HTML-Inhalt der Antworten wird vor der Ausgabe bereinigt: Script- und Style-Tags sowie Event-Attribute werden entfernt.

**Tipp** — Validieren Sie Ihre Auszeichnung mit dem Test für Rich-Suchergebnisse von Google. Beachten Sie, dass Google die Anzeige von FAQ-Rich-Snippets auf Behörden- und Gesundheitsseiten beschränkt hat, die Auszeichnung aber für generative Engines (ChatGPT, Perplexity, Gemini) weiterhin wertvoll ist, die sie aktiv auswerten.

## Cron-Automatisierung

Ein CLI-Skript wird mitgeliefert, um die Pipeline ohne manuelles Eingreifen auszuführen.

```
# Veraltete Keywords scrapen (standardmäßig max. 20)
php modules/dfaipaa/cli/cron.php scrape --limit=20

# KI-Antworten für ausstehende Fragen generieren
php modules/dfaipaa/cli/cron.php generate --limit=10

# Scraping und Generierung verketten
php modules/dfaipaa/cli/cron.php all --limit=20
```

Beispiel-Crontab, nächtlicher Lauf um 3 Uhr:

```
0 3 * * * cd /var/www/prestashop && php modules/dfaipaa/cli/cron.php all --limit=30 >> /var/log/dfaipaa.log 2>&1
```

**Wichtig** — Passen Sie den Parameter `--limit` an Ihre API-Kontingente an. Ein Stapel von 30 Keywords verbraucht 30 SerpApi-Anfragen; beim kostenlosen Plan (100 pro Monat) passt ein wöchentlicher Lauf besser als ein täglicher.

## Mehrsprachigkeit und Multishop

Fragen werden nach `id_lang` und `id_shop` indexiert. Konkret:

- dasselbe Keyword, auf Deutsch und Englisch gescrapt, ergibt zwei verschiedene Fragensätze;
- Antworten werden in der Sprache der Frage generiert, wobei der Prompt eine explizite Sprachdirektive anwendet (fr, en, es, de, it, nl, pt, pl);
- im Multishop erscheinen Fragen und Zuweisungen eines Shops nie in einem anderen;
- die Anzeigetitel (Reiter, Produkt, Kategorie) werden als lokalisierte Konfiguration gespeichert.

## Fehlerbehebung

### Das Scraping liefert keine Fragen

- Prüfen Sie Ihr Kontingent beim Anbieter: SerpApi bricht jenseits des kostenlosen Plans stillschweigend ab.
- Prüfen Sie die Stimmigkeit von Sprache und Land: „de" mit „US" liefert erratische Ergebnisse.
- Manche Keywords lösen bei Google schlicht keinen PAA-Block aus. Testen Sie die Abfrage manuell in einem privaten Fenster.
- Prüfen Sie bei DataForSEO das Format `login:password` im Feld API-Schlüssel.

### Die KI liefert Markdown statt HTML

Senken Sie die Temperatur auf 0.2 oder wechseln Sie zu einem leistungsfähigeren Modell. Der Prompt erzwingt bereits strikte HTML-Regeln, die leichtesten Modelle können sie jedoch teilweise ignorieren.

### Die FAQ erscheint nicht im Shop

- Prüfen Sie, ob mindestens eine Frage den Status `published` hat.
- Prüfen Sie, ob sie der aufgerufenen Entität (Produkt oder Kategorie) zugewiesen ist.
- Prüfen Sie, ob die Anzeige für diesen Entitätstyp in der Konfiguration aktiviert ist.
- Leeren Sie den Smarty-Cache unter **Erweiterte Parameter › Leistung**.

### Das JSON-LD erscheint nicht im Quelltext

Stellen Sie sicher, dass die Option „JSON-LD ausgeben" aktiviert ist und Ihr Theme den Hook `displayBeforeBodyClosingTag` tatsächlich aufruft. Manche Drittanbieter-Themes lassen ihn weg: Fügen Sie in diesem Fall `{hook h='displayBeforeBodyClosingTag'}` vor dem Schließen des Körpers in Ihrer `layouts/layout-both-columns.tpl` ein.

### Fehler „Class not found" nach der Installation

Der Ordner `vendor/` wurde nicht entpackt. Installieren Sie das Modul neu, indem Sie das ZIP über das Backoffice hochladen, statt es manuell zu entpacken.

### Betriebsprotokolle einsehen

Alle Vorgänge (Scraping, Generierung, Veröffentlichung) werden protokolliert. Zur Untersuchung:

```
SELECT * FROM ps_dfaipaa_log ORDER BY date_add DESC LIMIT 50;
```

## Deinstallation

Klicken Sie unter **Module › Modul-Manager** auf **Deinstallieren**. Der Vorgang löscht die 4 Tabellen `ps_dfaipaa_*`, die 4 Admin-Reiter und alle Konfigurationsschlüssel `DFAIPAA_`. Generierte Inhalte gehen endgültig verloren: Exportieren Sie Ihre Fragen vorher, wenn Sie sie behalten möchten.

## Technische Referenz

- **Technischer Slug**: `dfaipaa`
- **Namespace**: DataFirefly Dfaipaa (PSR-4, integrierter Autoloader)
- **Erstellte Tabellen**: `ps_dfaipaa_keyword`, `ps_dfaipaa_question`, `ps_dfaipaa_assignment`, `ps_dfaipaa_log`
- **Verwendete Hooks**: `displayHeader`, `displayProductExtraContent`, `displayFooterProduct`, `displayCategoryFooter`, `displayBeforeBodyClosingTag`, `actionFrontControllerSetMedia`, `actionAdminControllerSetMedia`, `actionProductUpdate`, `actionProductSave`, `actionCategoryUpdate`, `actionObjectProductDeleteAfter`, `actionObjectCategoryDeleteAfter`
- **Backoffice-Reiter**: AdminDfaipaa (Eltern), AdminDfaipaaConfig, AdminDfaipaaKeywords, AdminDfaipaaQuestions
- **Konfigurationsschlüssel**: `DFAIPAA_SCRAPER_PROVIDER`, `DFAIPAA_SCRAPER_API_KEY`, `DFAIPAA_SCRAPER_LANG`, `DFAIPAA_SCRAPER_COUNTRY`, `DFAIPAA_SCRAPER_MAX_PER_KEYWORD`, `DFAIPAA_AI_PROVIDER`, `DFAIPAA_AI_MODEL`, `DFAIPAA_AI_API_KEY`, `DFAIPAA_AI_TEMPERATURE`, `DFAIPAA_AI_MAX_TOKENS`, `DFAIPAA_AI_TONE`, `DFAIPAA_AI_BRAND_VOICE`, `DFAIPAA_AUTO_PUBLISH`, `DFAIPAA_REFRESH_INTERVAL`, `DFAIPAA_PRODUCT_MODE`, `DFAIPAA_EMIT_JSONLD`, `DFAIPAA_TAB_TITLE`, `DFAIPAA_PRODUCT_TITLE`, `DFAIPAA_CATEGORY_TITLE`
- **CLI**: `modules/dfaipaa/cli/cron.php` (Befehle `scrape`, `generate`, `all`)
- **Frontend-Template**: `views/templates/hook/faq.tpl`

## DSGVO-Konformität

Das Modul erhebt und speichert keinerlei personenbezogene Daten: Erfasst werden ausschließlich Keywords, Fragen, generierte Antworten und technische Betriebsprotokolle. Im Shop wird kein Cookie gesetzt. Die Aufrufe externer APIs (Scraping, KI) übermitteln nur das Keyword, die Frage und den Produktkontext — niemals Kundendaten.

## Support

Bei technischen Fragen wenden Sie sich an das DataFirefly-Team unter **contact@datafirefly.com** oder besuchen Sie Ihren Kundenbereich auf [datafirefly.com](https://www.datafirefly.com/de/).
