agentsclimarketplace

Programmatic seo

Skill DariuszCiesielski/polish-agent-skills/skills/seo/programmatic-seo

🇵🇱 Polskojęzyczne skille agentowe (Claude Code, Gemini CLI, Cursor) — marketing, SEO, content, sprzedaż

Install
npx -y skills add DariuszCiesielski/polish-agent-skills --skill programmatic-seo

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

SEO at scale — generowanie setek stron z szablonów per keyword pattern. "[usługa] + [miasto]", "[produkt] vs [produkt]", "[narzędzie] dla [branży]". Triggery: "programmatic SEO", "SEO at scale", "template pages", "generuj strony SEO", "strony lokalne", "miasto+usługa", "vs pages", "porównania", "masowe strony".

SKILL.md

6.2 KB, ~1.9k tokens by cl100k_base, as published. Nobody here has run it

Programmatic SEO — Template Pages at Scale

Generowanie setek/tysięcy stron z szablonów pod long-tail keywords. Sprawdzona taktyka SaaS: Zapier (integrations pages), Wise (currency pages), Nomadlist (city pages).

Kiedy używać

  • Produkt ma powtarzalny wzorzec keywords (usÅ‚uga×miasto, narzÄ™dzie×branża)
  • Chcesz pokryć setki long-tail keywords jednym template
  • Masz dane strukturalne (baza miast, lista integracji, katalog branż)
  • Użytkownik mówi: "programmatic SEO", "strony lokalne", "masowe strony"

Zależności

  • product-marketing-context → target-keywords.md (keyword patterns)
  • seo → walidacja generowanych stron
  • content-strategy → topic clusters jako źródÅ‚o patterns
  • schema-markup → schema per generated page

Wzorce (patterns)

Pattern 1: [Usługa] + [Miasto]

Dla: lokalne usługi, agencje, SaaS z local focus

/uslugi/seo-pozycjonowanie-warszawa
/uslugi/seo-pozycjonowanie-krakow
/uslugi/seo-pozycjonowanie-wroclaw

Dane: lista miast × lista usług Template: H1 z miastem, lokalne social proof, mapa, CTA regionalne

Pattern 2: [Produkt] vs [Konkurent]

Dla: SaaS z rozpoznawalnÄ… konkurencjÄ…

/porownania/produkt-vs-mailchimp
/porownania/produkt-vs-sendinblue
/porownania/produkt-vs-convertkit

Dane: lista konkurentów × kryteria porównania Template: tabela porównawcza, feature-by-feature, verdict

Pattern 3: [Narzędzie] dla [Branży]

Dla: SaaS horizontal z vertical use cases

/rozwiazania/crm-dla-agencji-marketingowych
/rozwiazania/crm-dla-biur-nieruchomosci
/rozwiazania/crm-dla-firm-szkoleniowych

Dane: lista branż × feature highlights per branża Template: branżowe case study, specific features, branżowy jargon

Pattern 4: [Integracja] + [Produkt]

Dla: SaaS z wieloma integracjami

/integracje/slack
/integracje/google-sheets
/integracje/zapier

Dane: lista integracji × opis workflow Template: jak połączyć, use cases, setup guide

Pattern 5: Glossary / Słownik

Dla: branże z dużo terminologii

/slownik/roi-return-on-investment
/slownik/cac-customer-acquisition-cost
/slownik/ltv-lifetime-value

Dane: lista terminów × definicje Template: definicja, formuła, przykład, powiązane terminy

Implementacja w Next.js

Krok 1: Przygotuj dane

// src/data/cities.ts
export const cities = [
  { name: "Warszawa", slug: "warszawa", population: 1794000, region: "mazowieckie" },
  { name: "Kraków", slug: "krakow", population: 780000, region: "małopolskie" },
  // ...
];

// src/data/services.ts
export const services = [
  { name: "Pozycjonowanie SEO", slug: "seo-pozycjonowanie", description: "..." },
  { name: "Tworzenie stron www", slug: "tworzenie-stron", description: "..." },
];

Krok 2: Dynamic route

// src/app/uslugi/[service]-[city]/page.tsx
import { cities } from "@/data/cities";
import { services } from "@/data/services";

export function generateStaticParams() {
  return cities.flatMap(city =>
    services.map(service => ({
      "service-city": `${service.slug}-${city.slug}`,
    }))
  );
}

export function generateMetadata({ params }) {
  const { city, service } = parseParams(params);
  return {
    title: `${service.name} ${city.name} — [Firma] | Lokalni eksperci`,
    description: `${service.name} w ${city.name}. ${service.description} Sprawdź ofertę →`,
  };
}

Krok 3: Template strony

Każda generated page MUSI mieć:

  1. Unikalny H1 z keyword + lokalizacja
  2. Min. 300 słów unikalnej treści (nie tylko zmienione miasto)
  3. Lokalne social proof (jeśli dostępne)
  4. Schema markup (LocalBusiness lub Service)
  5. Internal links do 3+ powiÄ…zanych stron
  6. CTA dopasowane do kontekstu

Krok 4: Anti-thin content

Problem: 100 stron z identyczną treścią i tylko zmienionym miastem = thin content → kara.

Rozwiązanie — warstwy unikalności:

WarstwaOpisMin. % unikalnej treści
1 — VariablesMiasto, region, dane lokalne10%
2 — ConditionalSekcje widoczne tylko dla wybranych miast/branż20%
3 — Data-drivenLokalne statystyki, ceny, dane demograficzne20%
4 — AI-generatedUnikalne paragrafy per kombinacja (batch generate)30%

Cel: min. 50% unikalnej treści per strona. Reszta to wspólny template.

Quality gates

Przed publikacją sprawdź:

  • Min. 300 słów per strona (500+ preferowane)
  • Unikalny title i meta description per strona
  • Min. 50% unikalnej treÅ›ci (nie tylko zmienne)
  • Schema markup (BreadcrumbList + typ strony)
  • Canonical URL ustawiony poprawnie
  • Internal links do 3+ stron
  • Sitemap zawiera wszystkie generated pages
  • robots.txt nie blokuje generated pages
  • Brak duplicate content (sprawdź sample 10 stron)

Skalowanie

SkalaStronPodejście
Mała10-50Ręczne dane + template
Åšrednia50-500CSV/JSON + generateStaticParams
Duża500-5000Baza danych + ISR (revalidate)
Mega5000+On-demand ISR + sitemap index

Cross-references

  • seo → walidacja generated pages
  • content-strategy → topic clusters → keyword patterns
  • schema-markup → schema per generated page
  • internal-linker → linking strategy dla generated pages
  • product-marketing-context → target-keywords.md (źródÅ‚o patterns)

Pułapki

  • Thin content — Google karze strony z <50% unikalnej treÅ›ci. Nie generuj 1000 stron z jednym zmienionym sÅ‚owem
  • Canonicalization — każda generated page ma swój canonical. Nie wskazuj na wspólnÄ… stronÄ™
  • Sitemap — przy 5000+ stronach użyj sitemap index (max 50k URL per sitemap)
  • noindex test pages — nie indeksuj stron z placeholder data
  • Incremental — zacznij od 10-20 stron, sprawdź czy Google indeksuje, potem skaluj

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most marketing audience skills give in ~1.9k tokens

Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07

  • Apply Poppins font to headingsin 41 of 690, across 6 files
  • Apply Lora font to body textin 41 of 690, across 6 files
  • Use Arial fallback for headingsin 39 of 690, across 4 files
  • Use Georgia fallback for body textin 39 of 690, across 4 files
  • Maintain text hierarchy and formattingin 39 of 690, across 4 files
  • Use accent colors for non-text shapesin 38 of 690, across 3 files
  • Use RGB values for precise color matchingin 38 of 690, across 3 files
  • Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
  • Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
  • Use active voice instead of passive voicein 26 of 690, across 10 files
  • Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
  • Prioritize clarity over clevernessin 22 of 690, across 8 files

Said here and by no other author read

  • write at least 300 words per page
  • ensure at least 50 percent unique content
  • link internally to three related pages
  • add all generated pages to the sitemap
  • start by generating ten to twenty pages

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 327,069. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.