Build seo-audit Skill (audit/apply/verify) aus GEO+SEO-Material #11

Open
opened 2026-04-30 03:01:43 +00:00 by mAi · 3 comments
Collaborator

Hintergrund

Wir haben aus den letzten Issues folgendes Material:

  • docs/geo-seo-guideline.md (589 Zeilen, Princeton-Paper-Empirie + 8 Hebel + 5 Stack-Adapter + Pre/Post-Launch-Checkliste + Maintenance + Quellen)
  • templates/base.html Schema-Slot + render.sh schema: Block (commit d3a2bdc)
  • tools/anti-ai-lint.py + tools/anti-ai-blacklist.yaml (commit b123524)
  • Whitelist-Konvention <!-- anti-ai-allow: term --> (commit 4f25d74)

m will das als wiederverwendbaren Skill für künftige Web-Projekte. Skill-Name: seo-audit.

Aufgabe (Inventor)

Designe und baue den seo-audit Skill. Nutze das write-a-skill Skill für proper structure, progressive disclosure, und bundled resources.

Drei Modi

  1. audit <project-dir> — Bestandsaufnahme:

    • Files-Check: llms.txt, robots.txt, sitemap.xml, AI-Crawler-Direktiven
    • HTML-Check: Schema-Markup vorhanden? Top-Third-Definition? Meta-tags? Open-Graph?
    • Cross-Site: sameAs-Anker konsistent?
    • Output: Markdown-Report mit Score + konkreten TODOs (Schweregrad sortiert)
  2. apply <project-dir> — Empfehlungen umsetzen oder als Issues anlegen:

    • Templates für llms.txt, robots.txt erzeugen
    • Schema-JSON-LD-Snippets pro Type vorschlagen (Person, Organization, Article, Product, FAQPage, LocalBusiness)
    • Optional: Gitea-Issues pro Befund anlegen (Flag --issues o.ä.)
  3. verify <url> — Live-Validation:

    • Schema.org Validator API call
    • Lighthouse / PageSpeed Insights API für Core Web Vitals
    • LLM-Smoke-Test: 4-5 Anfragen in ChatGPT / Claude / Perplexity über die Anthropic/OpenAI APIs (m hat keys), prüfen ob URL zitiert wird
    • Output: Pass/Warn/Fail je Check

Stack-Adapter (auto-detect)

Anhand vorhandener Files erkennen, welcher Stack:

  • onepager (sites//site.yaml + bash) → Schema in site.yaml's schema: Block, llms.txt unter sites//
  • Next.js (next.config.js / app/) → Metadata API, JSON-LD via <Script type="application/ld+json"> in layout
  • Fresh/Preact (deno.json + fresh.config.ts) → SSR-Schema-Komponenten
  • nginx static (nur HTML, kein build-system) → direkt in HTML
  • Generic HTML (fallback) → simple <script> injection in <head>

Reports und apply-Aktionen sollen stack-spezifisch sein.

Bundled Resources (Skill-Verzeichnis)

Unter ~/.claude/skills/seo-audit/:

  • SKILL.md — Skill-Definition mit Frontmatter (name, description) und Anweisungen. Nutze write-a-skill für die Struktur.
  • references/guideline.md — Verweis (oder Kopie) auf m/onepager docs/geo-seo-guideline.md. Decide: hardlink/copy oder URL-Verweis. Bei copy: dokumentiere Sync-Kadenz.
  • references/blacklist.yaml — Anti-AI-Vokabel-Blacklist (referenziere oder kopiere von m/onepager tools/anti-ai-blacklist.yaml).
  • templates/llms.txt.template — Generisches Template mit Placeholders.
  • templates/robots.txt.template — mit AI-Crawler-Direktiven aus der Guideline (Default: alle Bots erlauben).
  • templates/schema-snippets/{person,organization,article,product,faqpage,localbusiness}.json — JSON-LD Vorlagen.
  • references/checklist.md — Pre/Post-Launch Checkliste aus der Guideline (kopiert).

Out of Scope

  • Periodische Smoke-Tests (separate /schedule-Aufgabe).
  • Implementation in spezifischen Projekten (kommt als per-project Issue, nicht hier).
  • Brand-Strategie / Off-Site-Maßnahmen (Reddit, Wikipedia) — die müssen Menschen machen.

Speicherort + Commit

Skills liegen unter ~/.claude/skills/ was Symlink in ~/.dotfiles/.claude/skills/ ist. Du erstellst die Files dort und committest am Ende in m/dotfiles (nicht m/onepager). Branch: mai/<your-name>/seo-audit-skill o.ä. im dotfiles-repo.

Check cd ~/.dotfiles && git status um den Pfad zu verifizieren.

Inventor-Workflow (GATED)

Laut mai-head SKILL.md:

  1. Du designed + baust mit /write-a-skill als Hilfe.
  2. Wenn fertig: report "DESIGN READY FOR REVIEW" und parke. NICHT selbst nach main mergen, NICHT selbst zu coder shiften.
  3. Head reviewed mit m und entscheidet go/no-go.
  4. Bei go: ggf. coder shift (selber worker, /mai-coder skill) für Detail-Implementation.

Priorität

p2 — strategisches Tool für künftige Web-Projekte, kein akuter Blocker.

## Hintergrund Wir haben aus den letzten Issues folgendes Material: - `docs/geo-seo-guideline.md` (589 Zeilen, Princeton-Paper-Empirie + 8 Hebel + 5 Stack-Adapter + Pre/Post-Launch-Checkliste + Maintenance + Quellen) - `templates/base.html` Schema-Slot + `render.sh` `schema:` Block (commit d3a2bdc) - `tools/anti-ai-lint.py` + `tools/anti-ai-blacklist.yaml` (commit b123524) - Whitelist-Konvention `<!-- anti-ai-allow: term -->` (commit 4f25d74) m will das als wiederverwendbaren Skill für künftige Web-Projekte. Skill-Name: **`seo-audit`**. ## Aufgabe (Inventor) Designe und baue den `seo-audit` Skill. **Nutze das `write-a-skill` Skill** für proper structure, progressive disclosure, und bundled resources. ### Drei Modi 1. **`audit <project-dir>`** — Bestandsaufnahme: - Files-Check: llms.txt, robots.txt, sitemap.xml, AI-Crawler-Direktiven - HTML-Check: Schema-Markup vorhanden? Top-Third-Definition? Meta-tags? Open-Graph? - Cross-Site: sameAs-Anker konsistent? - Output: Markdown-Report mit Score + konkreten TODOs (Schweregrad sortiert) 2. **`apply <project-dir>`** — Empfehlungen umsetzen oder als Issues anlegen: - Templates für llms.txt, robots.txt erzeugen - Schema-JSON-LD-Snippets pro Type vorschlagen (Person, Organization, Article, Product, FAQPage, LocalBusiness) - Optional: Gitea-Issues pro Befund anlegen (Flag `--issues` o.ä.) 3. **`verify <url>`** — Live-Validation: - Schema.org Validator API call - Lighthouse / PageSpeed Insights API für Core Web Vitals - LLM-Smoke-Test: 4-5 Anfragen in ChatGPT / Claude / Perplexity über die Anthropic/OpenAI APIs (m hat keys), prüfen ob URL zitiert wird - Output: Pass/Warn/Fail je Check ### Stack-Adapter (auto-detect) Anhand vorhandener Files erkennen, welcher Stack: - **onepager** (sites/<domain>/site.yaml + bash) → Schema in site.yaml's `schema:` Block, llms.txt unter sites/<domain>/ - **Next.js** (next.config.js / app/) → Metadata API, JSON-LD via `<Script type="application/ld+json">` in layout - **Fresh/Preact** (deno.json + fresh.config.ts) → SSR-Schema-Komponenten - **nginx static** (nur HTML, kein build-system) → direkt in HTML - **Generic HTML** (fallback) → simple `<script>` injection in `<head>` Reports und apply-Aktionen sollen stack-spezifisch sein. ### Bundled Resources (Skill-Verzeichnis) Unter `~/.claude/skills/seo-audit/`: - `SKILL.md` — Skill-Definition mit Frontmatter (name, description) und Anweisungen. Nutze `write-a-skill` für die Struktur. - `references/guideline.md` — Verweis (oder Kopie) auf m/onepager `docs/geo-seo-guideline.md`. Decide: hardlink/copy oder URL-Verweis. Bei copy: dokumentiere Sync-Kadenz. - `references/blacklist.yaml` — Anti-AI-Vokabel-Blacklist (referenziere oder kopiere von m/onepager `tools/anti-ai-blacklist.yaml`). - `templates/llms.txt.template` — Generisches Template mit Placeholders. - `templates/robots.txt.template` — mit AI-Crawler-Direktiven aus der Guideline (Default: alle Bots erlauben). - `templates/schema-snippets/{person,organization,article,product,faqpage,localbusiness}.json` — JSON-LD Vorlagen. - `references/checklist.md` — Pre/Post-Launch Checkliste aus der Guideline (kopiert). ### Out of Scope - Periodische Smoke-Tests (separate `/schedule`-Aufgabe). - Implementation in spezifischen Projekten (kommt als per-project Issue, nicht hier). - Brand-Strategie / Off-Site-Maßnahmen (Reddit, Wikipedia) — die müssen Menschen machen. ## Speicherort + Commit Skills liegen unter `~/.claude/skills/` was Symlink in `~/.dotfiles/.claude/skills/` ist. Du erstellst die Files dort und committest am Ende **in m/dotfiles** (nicht m/onepager). Branch: `mai/<your-name>/seo-audit-skill` o.ä. im dotfiles-repo. Check `cd ~/.dotfiles && git status` um den Pfad zu verifizieren. ## Inventor-Workflow (GATED) Laut mai-head SKILL.md: 1. Du designed + baust mit `/write-a-skill` als Hilfe. 2. Wenn fertig: report `"DESIGN READY FOR REVIEW"` und parke. **NICHT selbst nach main mergen, NICHT selbst zu coder shiften.** 3. Head reviewed mit m und entscheidet go/no-go. 4. Bei go: ggf. coder shift (selber worker, /mai-coder skill) für Detail-Implementation. ## Priorität p2 — strategisches Tool für künftige Web-Projekte, kein akuter Blocker.
mAi self-assigned this 2026-04-30 03:01:43 +00:00
Author
Collaborator

Shift Progress [shift-1]

Worker: cronus (role: inventor)
Duration: 11m
Status: progress

Progress

Shift-1 (inventor) abgeschlossen. seo-audit Skill in m/dotfiles@mai/cronus/seo-audit-skill (commit 4e6c6c6, 20 files, 2618 LoC). Drei Modi (audit/apply/verify) + Stack-Adapter onepager/nextjs/fresh/nginx/generic. Bundled: SKILL.md (165 LoC), 7 references inkl. Kopien von docs/geo-seo-guideline.md und tools/anti-ai-blacklist.yaml mit @-SHA-Headern + quartalsweiser Sync, 6 Schema-Templates, llms.txt + robots.txt Templates, 4 Scripts. audit.py funktioniert real auf 59 Sites (mean 57.2/100). DESIGN READY FOR REVIEW — Gate für m vor coder-shift.

Next Steps

  • m reviewen lassen
  • dann Head entscheidet ob coder-shift für (a) audit-tool gegen rendered build/ statt sources
  • (b) llms.txt-Renderer mit echtem Mustache-Lib
  • (c) verify.sh LLM-Querygen-Implementation.
## Shift Progress [shift-1] **Worker:** cronus (role: inventor) **Duration:** 11m **Status:** progress ### Progress Shift-1 (inventor) abgeschlossen. seo-audit Skill in m/dotfiles@mai/cronus/seo-audit-skill (commit 4e6c6c6, 20 files, 2618 LoC). Drei Modi (audit/apply/verify) + Stack-Adapter onepager/nextjs/fresh/nginx/generic. Bundled: SKILL.md (165 LoC), 7 references inkl. Kopien von docs/geo-seo-guideline.md und tools/anti-ai-blacklist.yaml mit @-SHA-Headern + quartalsweiser Sync, 6 Schema-Templates, llms.txt + robots.txt Templates, 4 Scripts. audit.py funktioniert real auf 59 Sites (mean 57.2/100). DESIGN READY FOR REVIEW — Gate für m vor coder-shift. ### Next Steps - [ ] m reviewen lassen - [ ] dann Head entscheidet ob coder-shift für (a) audit-tool gegen rendered build/ statt sources - [ ] (b) llms.txt-Renderer mit echtem Mustache-Lib - [ ] (c) verify.sh LLM-Querygen-Implementation.
Author
Collaborator

Shift-2 (coder) — implementation complete

Branch: mai/cronus/seo-audit-skill in m/dotfiles, latest commit 3892328.

Was umgesetzt wurde

  1. audit.py Anti-AI lint mit Whitelist-Honoring. Subprocess-zu-tools/anti-ai-lint.py wenn das Projekt eine eigene hat (m/onepager-Fall, teilt dieselben Regeln + Whitelists), sonst Inline-Fallback mit dem gebündelten references/blacklist.yaml. HTML-Comment- (<!-- anti-ai-allow: term -->) und site.yaml-Whitelists (anti_ai_allow:) werden honoriert. Verifiziert auf synthetischer Test-Fixture: 9 Vocab+Pattern-Hits → 3 (nach HTML-Allow) → 1 (nach site.yaml-Allow).

  2. apply.py Mustache-Subset statt naiver Substitution. {{var}} und {{#section}}…{{/section}} mit Listen-Iteration und Per-Item-Context-Merge. Pure Stdlib. render_robots() und render_llms() gehen jetzt durch denselben Renderer.

  3. verify.sh LLM-Smoke-Test end-to-end via neuem scripts/llm_smoke.py: holt Page, generiert 4 Queries (H1-as-question, topic+identity, number-anchored, use-case verb), ruft Anthropic + OpenAI Web-Search-Tools, klassifiziert pro Query pass/fail, aggregiert zu strong-pass/partial-pass/one-hit/fail. Verdicts werden in den verify.sh pass/warn/fail/skip-Rail geroutet. Optional --save-history schreibt JSON-Snapshots für Trend-Analyse.

  4. audit-rules.md build-vs-source dokumentiert. Audit bevorzugt rendered HTML (build/<domain>/index.html) über Source. Fallback wenn build/ fehlt. Implication: vollständiges Audit auf m/onepager braucht ./build.sh zuerst.

Initial-Sweep auf m/onepager (nach ./build.sh)

Wie m/onepager#10 commit fdac496 dokumentiert: Bestandsaufnahme, keine Aktion.

  • Sites: 59
  • Mean score: 57.2/100
  • Severity: 57 fail / 334 warn / 116 info
  • Top rules:
    • robots-missing × 59
    • llms-missing × 59 (info — optional für Satire)
    • sitemap-missing × 59
    • og-image-missing × 57, twitter-card-missing × 57
    • schema-missing × 57 (FAIL — die meisten sind Satire-Sites; siehe Anmerkung unten)
    • og-title-missing × 52, og-description-missing × 52
    • top-third-weak × 39
    • meta-description-missing × 15
    • title-too-long × 1
    • anti-ai-* × 0 — Whitelist 4f25d74 hält

Anmerkung zum Schema-FAIL

Das Skill kennt eine satire: true (oder seo_audit_satire: true) Konvention in site.yaml, die schema-missing von FAIL zu INFO downgrades — aber kein onepager-site.yaml setzt das aktuell. Per-Site-Klassifikation (welche Wortspiel-Sites bewusst Satire sind, welche nicht) ist Folgearbeit.

Ausblick

Die 57.2/100 Baseline ist die Implementation-Backlog für künftige Per-Site-Issues, nicht ein Mangel des Skills. Das Skill ist jetzt funktional einsetzbar für jeden onepager / Next.js / Fresh / nginx / generic Stack.

Nicht selbst nach main gemerged. Head + m gate.

## Shift-2 (coder) — implementation complete Branch: `mai/cronus/seo-audit-skill` in m/dotfiles, latest commit [3892328](https://mgit.msbls.de/m/dotfiles/commit/3892328). ### Was umgesetzt wurde 1. **`audit.py` Anti-AI lint** mit Whitelist-Honoring. Subprocess-zu-`tools/anti-ai-lint.py` wenn das Projekt eine eigene hat (m/onepager-Fall, teilt dieselben Regeln + Whitelists), sonst Inline-Fallback mit dem gebündelten `references/blacklist.yaml`. HTML-Comment- (`<!-- anti-ai-allow: term -->`) und `site.yaml`-Whitelists (`anti_ai_allow:`) werden honoriert. Verifiziert auf synthetischer Test-Fixture: 9 Vocab+Pattern-Hits → 3 (nach HTML-Allow) → 1 (nach site.yaml-Allow). 2. **`apply.py` Mustache-Subset** statt naiver Substitution. `{{var}}` und `{{#section}}…{{/section}}` mit Listen-Iteration und Per-Item-Context-Merge. Pure Stdlib. `render_robots()` und `render_llms()` gehen jetzt durch denselben Renderer. 3. **`verify.sh` LLM-Smoke-Test** end-to-end via neuem `scripts/llm_smoke.py`: holt Page, generiert 4 Queries (H1-as-question, topic+identity, number-anchored, use-case verb), ruft Anthropic + OpenAI Web-Search-Tools, klassifiziert pro Query pass/fail, aggregiert zu strong-pass/partial-pass/one-hit/fail. Verdicts werden in den verify.sh pass/warn/fail/skip-Rail geroutet. Optional `--save-history` schreibt JSON-Snapshots für Trend-Analyse. 4. **`audit-rules.md` build-vs-source dokumentiert.** Audit bevorzugt rendered HTML (`build/<domain>/index.html`) über Source. Fallback wenn `build/` fehlt. Implication: vollständiges Audit auf m/onepager braucht `./build.sh` zuerst. ### Initial-Sweep auf m/onepager (nach `./build.sh`) Wie m/onepager#10 commit fdac496 dokumentiert: Bestandsaufnahme, keine Aktion. - Sites: 59 - Mean score: 57.2/100 - Severity: 57 fail / 334 warn / 116 info - Top rules: - `robots-missing` × 59 - `llms-missing` × 59 (info — optional für Satire) - `sitemap-missing` × 59 - `og-image-missing` × 57, `twitter-card-missing` × 57 - `schema-missing` × 57 (FAIL — die meisten sind Satire-Sites; siehe Anmerkung unten) - `og-title-missing` × 52, `og-description-missing` × 52 - `top-third-weak` × 39 - `meta-description-missing` × 15 - `title-too-long` × 1 - **`anti-ai-*` × 0** — Whitelist 4f25d74 hält ### Anmerkung zum Schema-FAIL Das Skill kennt eine `satire: true` (oder `seo_audit_satire: true`) Konvention in `site.yaml`, die `schema-missing` von FAIL zu INFO downgrades — aber kein onepager-`site.yaml` setzt das aktuell. Per-Site-Klassifikation (welche Wortspiel-Sites bewusst Satire sind, welche nicht) ist Folgearbeit. ### Ausblick Die 57.2/100 Baseline ist die Implementation-Backlog für künftige Per-Site-Issues, nicht ein Mangel des Skills. Das Skill ist jetzt funktional einsetzbar für jeden onepager / Next.js / Fresh / nginx / generic Stack. **Nicht selbst nach main gemerged. Head + m gate.**
mAi added the
done
label 2026-04-30 14:28:15 +00:00
Author
Collaborator

Head-Bestätigung: Branch mai/cronus/seo-audit-skill ist in m/dotfiles@main gemerged worden (1a70ff2). Skill ist live. Done-Label gesetzt — m closes.

Head-Bestätigung: Branch `mai/cronus/seo-audit-skill` ist in m/dotfiles@main gemerged worden ([1a70ff2](https://mgit.msbls.de/m/dotfiles/commit/1a70ff2)). Skill ist live. Done-Label gesetzt — m closes.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: m/onepager#11
No description provided.