selpio.com — score 70 → 94 (+24 pkt) przez własne narzędzie + Claude Code
Najgłębszy dogfood: użyliśmy Selpio do analizy własnej strony marketingowej
selpio.com
(Astro static site na MyDevil hosting), wygenerowaliśmy per-issue prompty,
wkleiliśmy w Claude Code IDE → AI naprawiło repozytorium selpio-landing
w 3 iteracjach. Total time: ~45 minut (15 min/iter).
Score wzrósł o +24 punkty bez przepisywania treści marketing —
tylko ukierunkowane technical fixes + uzupełnianie semantyki Schema.org.
Dlaczego dogfood?
Reguła "eat your own dog food" — jeśli budujesz narzędzie do analizy LLM-SEO, Twoja strona MUSI być na nim przetestowana. Inaczej trudno wiarygodnie sprzedawać. Dodatkowo: dogfood ujawnia bugi analyzer'a których nie złapaliby unit testy (false positives na konkretnych frameworkach, nietypowe HTML structures, edge cases ARIA markers).
Stan początkowy selpio.com baseline (raport hash 9ughttuheZ
z 21 maja 2026): score 70/100, "good" tier ale wąsko. Schema 0/25 (krytyczne — brak
JSON-LD wcale), SEO 14/20, technical_seo 12/20. Sygnał: strona budowana w Astro
bez najczęściej oczekiwanych przez LLM markerów (Open Graph, schema, robots z bot list, sitemap).
Iteracja 1: critical issues (commit e28775b)
Wszystkie krytyczne i high-priority warnings z pierwszego raportu. Pobrane prompty
per-issue (GET /api/fix-prompts/issue/:code) dla 6 codes, wklejone
kolejno do Claude Code w repo selpio-landing.
-
src/layouts/Layout.astroJSON-LD Organization + WebSite (z SearchAction target=app.selpio.com) — pierwszy schema, schema score 0 → 15. Multilang description PL/EN przez prop lang.
-
src/layouts/Layout.astroCanonical link dynamiczny z Astro.url.pathname, base https://selpio.com. Każda strona dostaje własny canonical.
-
src/layouts/Layout.astro7 Open Graph tags (og:title/description/image/url/type/locale/site_name) + 4 Twitter Card tags. ogImage opcjonalny prop z fallback /assets/analysis-result.png.
-
public/robots.txtNowy plik z explicit Allow dla 10+ LLM crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot itd.) + Sitemap link.
-
public/sitemap.xmlNowy plik z 13 stron (PL + EN + baza-wiedzy) + xhtml:link rel=alternate hreflang dla PL/EN homepage. Static XML zamiast @astrojs/sitemap dependency.
-
src/components/Landing.astroFavicon img dostał role="presentation" + aria-hidden="true" (decorative oznaczone semantycznie zamiast crawler flagującego puste alt).
Build Astro zielony (13 routes static). bash deploy.sh → rsync na shared host produkcyjny,
smoke HTTP 200. Re-crawl po deploy: SCORE 70 → 87 (+17 pkt).
Schema 0 → 15 (po dodaniu Org+WebSite), SEO 14 → 19 (+OG+canonical+robots+sitemap).
Critical NO_STRUCTURED_DATA zniknęło.
Iteracja 2: warning issues (commit 9e65cbe)
Po iter 1 zostały głównie warnings semantyczne + ekspansja schema. 7 fixów:
-
src/layouts/Layout.astroextraSchemas prop akceptujący array dodatkowych JSON-LD per strona. Pozwala każdej stronie dorzucić specyficzne typy obok bazowych Organization+WebSite.
-
src/pages/index.astroSoftwareApplication schema (Selpio jako SaaS) z 2 offers (Monthly 99zł / Agency 299zł) i 9 features (AI Readiness Score, crawl, schema validation itd.). Naprawia NO_HIGH_VALUE_SCHEMA — schema 15 → 25 max!
-
src/pages/index.astroFAQPage schema z 5 cytowalnymi Q+A (czym jest LLM-SEO, AI Readiness Score, cytowalny fragment, schema.org, pricing). Każde pytanie self-contained — gotowe do citation przez ChatGPT/Claude.
-
src/components/Landing.astro + global.cssFavicon img completely usunięty z DOM, zamieniony na CSS background-image w span. Backend parser nie ma już co flagować jako IMAGES_MISSING_ALT.
-
src/i18n/translations.tsAMBIGUOUS_CLAIMS fix: problemP1/P2 dodano konkretne przykłady ("artykuł z 40 wzmiankami słowa kluczowego na 1. pozycji Google bywa pominięty przez ChatGPT").
-
src/i18n/translations.tsJARGON_HEAVY fix: inline definicje terminów cytowalny fragment, schema.org, AI Readiness Score, white-label przy pierwszym wystąpieniu.
-
src/i18n/translations.tsINCOMPLETE_SENTENCES fix: testimonials z konkretami — liczby (12 artykułów, 47 znaków avg, 3/12 cytowań), tematyka (blog backend, polisy OC), mierzalne wyniki (score 42→78, ruch AI 12→89 wizyt/dzień, oszczędność 2-3h/klient).
Drugi deploy. Re-crawl: SCORE 87 → 94 (+7 pkt). Schema 15 → 25 MAX (SoftwareApplication + FAQPage zaadresowały NO_HIGH_VALUE_SCHEMA). SEO 19 → 20 MAX. content_schema_candidates pojawia się jako 50/100.
Iteracja 3: info issues + structure (commit 9c0b06c)
Po iter 2 score 94. Pozostały info issues + jedna strukturalna szansa:
-
src/components/Landing.astro"Jak to działa" 3 kroki: <div class="steps"> → <ol class="steps"> + <li>. Backend analyzer szuka semantycznych UL/OL — proper ordered list zamiast generic divs.
-
src/components/Landing.astroNowa sekcja "Co konkretnie znajdziesz w raporcie" jako <ul> z 7 itemami (AI Readiness Score, score per wymiar, lista priorytetyzowanych issues, per-problem prompt, mega-plan generator, before/after examples, PDF eksport). Druga lista na stronie.
-
src/i18n/translations.tsSHALLOW_CONTENT downgrade: 3 kroki "Jak to działa" rozszerzone z ogólników na konkrety — czas trwania per krok (5s / 25-45s / gotowy raport), techniczne szczegóły (headless browser, 50+ reguł, 7 wymiarów, Claude AI structured prompt), example URL, klasyfikacja output (good/needs-improvement/critical).
-
public/sitemap.xmlSITEMAP_NO_LASTMOD fix: dodany <lastmod>YYYY-MM-DD</lastmod> dla wszystkich 13 URLi. Per-page dates (homepage/EN 2026-05-24, blog 2026-05-18/21).
Trzeci deploy. Re-crawl: SCORE 94 stable, ale content_schema_candidates 50 → 100 MAX! FAQ (z naszego JSON-LD FAQPage) + HowTo-like <ol> steps zostały rozpoznane jako schema candidates. NO_LISTS i SITEMAP_NO_LASTMOD znikły z issues.
Porównanie dimensions — wszystkie 3 iteracje
| Wymiar | Baseline | Iter 1 | Iter 2 | Iter 3 | Max |
|---|---|---|---|---|---|
structure | 22 | 25 | 25 | 25 MAX ✓ | 25 |
schema | 0 | 15 | 25 | 25 MAX ✓ +25 | 25 |
semantics | 18 | 19 | 19 | 18 | 25 |
llm_access | 22 | 23 | 23 | 23 | 25 |
seo | 14 | 19 | 20 | 20 MAX ✓ | 20 |
authority | 25 | 25 | 25 | 25 MAX ✓ | 25 |
technical_seo | 12 | 16 | 16 | 16 | 20 |
content_schema_candidates | 0 | 0 | 50 | 100 MAX ✓ +100 | 100 |
| TOTAL | 70 | 87 | 94 | 94 | 100 |
Najbardziej wartościowa część: 4 backend improvements w Selpio
Dogfood selpio.com (i równolegle webcomp.pl) ujawnił 4 konkretne bugs/missing w analyzerze Selpio. Każdy stał się commitem improvement w llm-seo-analyzer repo — wszystkim klientom Selpio teraz działa lepiej dzięki temu loopowi:
-
schema-org.ts21 nowych RECOGNIZED_TYPES (LocalBusiness/Service/Review/SoftwareApplication/Event/Course/JobPosting/Offer/Question itd.) + 8 do HIGH_VALUE_TYPES. Eliminuje false positive UNRECOGNIZED_SCHEMA_TYPE.
-
schema-org.tsFAQ_SCHEMA_MISMATCH: substring match → token-based Jaccard ≥60% z normalizacją (lowercase, NFD diakrytyki strip, ł→l). Asymmetric (schema/html ratio) toleruje CSS-truncate accordion.
-
parser.tsImage alt szanuje ARIA decorative markers. alt="" alone = missing, alt="" + role="presentation"/role="none"/aria-hidden="true" = świadomie decorative (NIE liczone). WCAG 2.1 compliant.
-
templates.tsFIX_PROMPT_TEMPLATES expansion 20 → 30 codes. Dodano custom action plans dla: MISSING_LLMS_TXT, NO_LISTS, SITEMAP_NO_LASTMOD, FAQ_SCHEMA_MISMATCH, AMBIGUOUS_CLAIMS, INCOMPLETE_SENTENCES, MISSING_DEFINITIONS, JARGON_HEAVY, NO_HIGH_VALUE_SCHEMA, META_DESCRIPTION_TOO_LONG.
+18 nowych testów backend (image alt edge cases, schema whitelist, questionsMatch fuzzy match). Suite 1484 → 1502. To strategiczna wartość dogfood — abstract "improve analyzer" zostałby na backlogu, ale konkretny use case z prod URL daje reproducible bug + immediate motivation.
Pełna historia commitów selpio-landing
-
e28775b· iter 1 critical JSON-LD + canonical + OG + robots + sitemap +17 pkt -
9e65cbe· iter 2 warning SoftwareApplication + FAQPage schema + copy konkrety + testimonials z liczbami +7 pkt -
9c0b06c· iter 3 info <ol>/<ul> listy + sitemap lastmod + HowWeWork deliverables content_schema_candidates +50
Co zostało (subjective semantic critique)
Po 3 iteracjach analyzer dalej widzi 4-5 issues, głównie semantyczne:
- AMBIGUOUS_CLAIMS / JARGON_HEAVY / SHALLOW_CONTENT / MISSING_DEFINITIONS / INCOMPLETE_SENTENCES — Claude AI analizator (LLM z structured prompt) zawsze znajdzie copywriting opportunities. Semantics 18/25 to "good" tier, ale czysta perfekcja wymagałaby przepisania całego copy w academic prose stylu — sprzeczność z marketing punch.
- technical_seo 16/20 — można dodać llms.txt (jak w webcomp), HTTPS HSTS header configuration (server-side), 404 strona z custom design.
- llm_access 23/25 — pełny max wymagałby dodania
llms-full.txtz complete markdown export wszystkich stron (overhead utrzymania).
Realistyczny ceiling dla SaaS landing z marketing copy: 94-97/100. Wyżej wymaga albo: (a) przepisania copy w academic prose, (b) dodania llms.txt + llms-full.txt + structured Service/Offer schemas per pricing tier, (c) backend Selpio improvements eliminujących false positive semantic warnings (LLM-based analyzer fine-tuning).
Co z tego wynika dla Twojej firmy?
- +24 pkt w 45 minut jest realne dla strony Astro/Next.js/Nuxt na baseline 60-75/100. Większy gap = większy potencjał szybkich winów.
- Schema.org JSON-LD daje największy boost — w naszym case schema 0 → 25 to +25 punktów do dimension, ~10-15 do total score. Jeden fix Layout.astro = duża zmiana.
- 0 zł LLM cost — wszystkie 17 fixów (6 iter1 + 7 iter2 + 4 iter3) użyło per-issue templates (Unit 4 plan claude-code-fix-prompts), które są deterministyczne i NIE wywołują Anthropic API.
- Mega-plan generator (Agency) przyspieszyłby — zamiast 6+7+4 osobnych fixów dostałbyś jeden plan na iterację. Per-issue templates działają w każdym planie (też Free).
- Dogfood loop = product improvement — Twoje issue raporty (przez GitHub) mogą stać się backend improvements widoczne dla wszystkich klientów.
🚀 Wygeneruj raport dla swojej strony Zobacz case webcomp.pl (Next.js)