# Pillar pages (`/insights/*`) — SEO data & FAQ research

**Last updated:** 2026-04-10

Pillar URLs are **not** entries in [`marketing-pages-registry.json`](../marketing-pages-registry.json), so **`run-page-research-pipeline.sh`** does not apply. Use the steps below for **GSC**, **SISTRIX**, **Serper** (optional), and **documentation** next to [`PAGE_IMPROVEMENT_DATA_PLAYBOOK.md`](../../PAGE_IMPROVEMENT_DATA_PLAYBOOK.md).

**Site-wide map:** [`SEO_DATA_COLLECTION_MATRIX.md`](../../SEO_DATA_COLLECTION_MATRIX.md) (GSC/GA4/SISTRIX per surface).

**FAQ-only sprint:** Step-by-step checklist → [`_templates/PILLAR_FAQ_REFRESH_CHECKLIST.md`](_templates/PILLAR_FAQ_REFRESH_CHECKLIST.md).

**One-shot pipeline:** `bash v2/scripts/pillar-pages/run-pillar-research-pipeline.sh {slug} [--with-ga4] [--dry-run]` chains GSC queries + SISTRIX metrics + SISTRIX SERP (+ optional GA4 single-path).

## 1. Folder layout (per pillar)

`docs/content/pages/pillar-pages/{slug}/`

| Artifact | Purpose |
|----------|---------|
| `KEYWORD_DECISION.md` | Seed keywords → data pulls → intent → FAQ mapping |
| `data/gsc-queries.json` | GSC query export for canonical path |
| `data/keywords-candidate.json` | SISTRIX metrics seed list |
| `data/keywords-sistrix.json` | Output: `keyword.seo.metrics` |
| `data/target-keywords.json` | Primary + secondary for SERP builder |
| `data/sistrix-keyword-serp.json` | Output: cheap `keyword.seo` top 10 |
| `data/faq-research-serper.json` | Optional Serper notes |
| `data/ga4-landing.json` | GA4 snapshot (often manual — no dedicated `/insights/*` GA script) |
| `SERP_ANALYSIS.md` | SERP features, competitor summary |
| `COMPETITIVE_ANALYSIS.md` | Gap notes (optional) |

## 2. Commands (repo root)

**GSC queries (API):** Prefer the canonical wrapper (same implementation):

```bash
php v2/scripts/seo/collect-gsc-queries.php \
  --path=/insights/{slug} \
  --output=docs/content/pages/pillar-pages/{slug}/data/gsc-queries.json \
  --days=90
```

(Legacy: `v2/scripts/tools/collect-tool-gsc-queries.php` — identical flags.)

**GA4 single-path (optional):** Populate `data/ga4-landing.json` via API (same property as other collectors):

```bash
php v2/scripts/seo/collect-page-performance-ga4.php \
  --path=/insights/{slug} \
  --output=docs/content/pages/pillar-pages/{slug}/data/ga4-landing.json \
  --days=90
```

**SISTRIX keyword metrics** (`keyword.seo.metrics`, ~5 credits/keyword):

```bash
php v2/scripts/pillar-pages/collect-pillar-keywords-sistrix.php --pillar={slug}
```

Requires `data/keywords-candidate.json` (see Dienstplan example).

**SISTRIX cheap SERP** (`keyword.seo`, ~1 credit/keyword, 7-day cache):

```bash
php v2/scripts/pillar-pages/collect-pillar-keyword-serp.php --pillar={slug} --limit=10
```

Requires `data/target-keywords.json` and benefits from prior `gsc-queries.json`.

**Serper PAA:** Registry-based script is [`serper-paa-research.py`](../../../../v2/scripts/marketing-pages/serper-paa-research.py) (marketing pages only). For pillars, call Serper manually or document organic/PAA gaps in `data/faq-research-serper.json`.

**Period compare (optional):** [`compare-gsc-query-exports.php`](../../../../v2/scripts/tools/compare-gsc-query-exports.php) with two `gsc-queries.json` exports.

## 3. FAQ implementation

- Data: `v2/data/misc-faqs/pillar_{slug}.json`
- Render: `render-faq-json.php` + `include-marketing-faq-jsonld.php` after footer
- Standards: [`FAQ_WEBSITE_STANDARD.md`](../../FAQ_WEBSITE_STANDARD.md), [`FAQ_REWORK_DECISION_TREE.md`](../../FAQ_REWORK_DECISION_TREE.md)

**Checks:**

```bash
php v2/scripts/dev-helpers/audit-faq-json-internal-links.php '--glob=v2/data/misc-faqs/pillar_*.json'
php v2/scripts/dev-helpers/audit-faq-json-self-links-and-anchors.php --file=v2/data/misc-faqs/pillar_{slug}.json
php v2/scripts/dev-helpers/verify-faq-jsonld-parity.php --file=misc-faqs/pillar_{slug}.json
php v2/scripts/dev-helpers/audit-marketing-faq-ssot.php
```

## 4. Post-deploy

- [Rich Results Test](https://search.google.com/test/rich-results) on the live URL (FAQPage + `@context`)
- Re-check GSC 4–8 weeks after publish

## 5. Credit discipline

Follow [`VIP_MARKETING_SEO_DATA_TIERS.md`](../marketing-pages/VIP_MARKETING_SEO_DATA_TIERS.md): prefer cheap SERP + metrics; use expensive domain-keyword SERP only when justified and documented in `KEYWORD_DECISION.md`.
