Seo logo

Seo

Community
alpham8
seo

Use when writing, reviewing, or optimizing blog posts, landing pages, meta tags, titles, descriptions, headings, URLs, or any user-facing web content for search engines. Triggers on SEO questions, content audits, structured data, Open Graph tags, schema markup, or on-page optimization. Also use for German-language SEO specifics (umlauts, hreflang, Flesch DE).

Overview

Publisheralpham8
Repositoryagentic-webdev
Skill nameseo
Stars
4
Forks
0
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by alpham8 on GitHub. Read the source before you install it.

Installation

Install the Seo AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/alpham8/agentic-webdev/tree/master/skills/seo
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/alpham8/agentic-webdev.git /tmp/agentic-webdev
mkdir -p .claude/skills
cp -r /tmp/agentic-webdev/skills/seo .claude/skills/seo
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Seo in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Seo on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Seo is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

On-Page SEO — Blog & Content Reference

Concrete limits, rules, and checklists for on-page SEO. All numbers reflect Google's current SERP rendering (2025-2026).

Title Tag

PropertyLimitNotes
Desktop pixel width580 px (max ~600 px)Proportional font — W/M wider than i/l
Mobile pixel width~920 px (smaller font)More room on mobile
Character guideline50-60 charactersCovers ~90% of desktop SERPs
Keyword placementPrimary keyword near the beginningNatural language, no keyword stuffing
UniquenessOne unique title per pageNever duplicate across pages
BrandAppend brand after separator if space allowsPrimary Keyword — Brand

Quick check: If your title exceeds 55 characters, verify pixel width with a SERP preview tool.

Meta Description

PropertyLimitNotes
Desktop pixel width~920 px
Desktop characters150-160 charactersGoogle sometimes shows up to 300
Mobile characters~120 charactersShorter display on mobile
Safe cross-device120-158 charactersMost important message within first 120
Focus keywordMust appear in the descriptionNatural einbauen, nicht erzwingen
CTAInclude a call-to-action"Jetzt lesen", "Erfahre mehr"
UniquenessOne unique description per pageNever duplicate

Rule: Front-load the value proposition into the first 120 characters — everything after may be truncated on mobile.

Heading Structure (H1-H6)

RuleDetail
One H1 per pageContains primary keyword naturally; describes core topic
Sequential nestingH1 → H2 → H3 → H4; never skip levels (no H1 → H3)
H2 = major sectionsSecondary keywords and semantically related terms
H3 = subsectionsBreak down H2 sections into granular detail
No styling abuseNever use heading tags for visual styling; use CSS classes
Subheading distributionMax 300 words between two subheadings; long text blocks without heading kill readability and SEO

URL / Slug

RuleDetail
Length3-5 words (~50-60 characters)
SeparatorHyphens (-), never underscores
CaseAlways lowercase
KeywordMain keyword at the beginning
No dates/blog/seo-leitfaden/ not /blog/2026/03/seo-leitfaden/
DepthMax 2-3 levels; avoid deep nesting
UmlautsReplace: ä→ae, ö→oe, ü→ue, ß→ss (never just drop the dots)
Stop wordsRemove unnecessary filler words (und, der, die, das)

Image SEO

RuleDetail
Alt text length80-140 characters (5-15 words)
Alt text contentDescriptive, keyword-relevant, unique per image
Decorative imagesalt="" (empty, not omitted)
File namingDescriptive, hyphen-separated: blaues-leder-etui.webp not IMG_4521.jpg
Format priorityAVIF → WebP → JPEG/PNG fallback; use <picture> element
DimensionsAlways set width and height attributes (prevents CLS)
Lazy loadingloading="lazy" for below-fold; loading="eager" + fetchpriority="high" for hero/LCP
ResponsiveUse srcset for responsive serving

Internal Linking

RuleDetail
Density2-5 contextual links per 1,000 words
Total per pageKeep under 150 links
Click depthKey pages within 3 clicks of homepage
Anchor textDescriptive, varied; mix exact-match and topically related
Outbound links1-2 autoritäre externe Links pro Beitrag (Quellenangaben, Referenzen)
Topic clustersPillar pages + supporting content
Orphan pagesJede Seite braucht mind. einen internen Link, der auf sie zeigt
Table of contentsAdd for posts >1,000 words; anchor links matching H2/H3

Content Structure & Length

Content TypeWord Count
Quick-answer post300-500 words
Standard blog post1,500-2,500 words
How-to guide1,700-2,500 words
Pillar / ultimate guide3,000-5,000+ words
RuleDetail
Featured snippetsAnswer-first: direct answer in 40-60 words right after the heading
List snippets6-10 items for list snippets
Table snippets4-6 columns, 5-10 rows
Early content44% of AI citations come from the first 30% of page content
Keyword in first paragraphFocus keyword must appear within the first 10% of the text (ideally first sentence)
Keyword density1-2% as rough guideline; focus on natural language, not frequency
Keyword cannibalizationEach post targets a unique focus keyword — never optimize two pages for the same keyword
Thin contentPages with <300 words are flagged as thin content by Google; always exceed this minimum
Readability (DE)Flesch-Index 50-60 for German texts (see German SEO section)
Passive voiceMax 10% passive sentences; active voice ranks and reads better
Transition words (DE)Mind. 30% der Sätze mit Übergangswörtern (allerdings, deshalb, beispielsweise, daher, außerdem)

Open Graph & Social Meta Tags

TagSpecification
og:titleUnder 60 characters
og:type"article" for blog posts
og:image1200×630 px (1.9:1); JPEG/PNG; absolute HTTPS URL
og:urlCanonical URL of the page
og:description130-160 characters (safe range)
og:image:altRequired if og:image is set
twitter:card"summary_large_image"

OG uses property attribute, Twitter uses name attribute. Set both and keep in sync.

Canonical URL

RuleDetail
Self-referencingEvery page gets a self-referencing canonical, even without duplicates
Absolute URLsAlways use full https:// URLs
One per pageMultiple canonicals cause confusion
Paginated pagesEach page gets its own self-referencing canonical

XML Sitemap

RuleDetail
Blog postsEvery published blog post must be included in the XML sitemap
lastmodSet <lastmod> to the actual last modification date (ISO 8601)
Excluded pagesnoindex pages, redirects, and error pages must NOT be in the sitemap
Auto-generationUse CMS or plugin to auto-generate; never maintain manually
SubmitReference sitemap in robots.txt via Sitemap: https://example.de/sitemap.xml

Content Freshness

RuleDetail
"Zuletzt aktualisiert"Visible date on the page when content was last reviewed
dateModifiedMust match the visible date in Schema.org JSON-LD
Review cycleAudit content at least annually; YMYL topics more frequently
Outdated statisticsUpdate numbers, percentages, and year references when refreshing

Schema.org / Structured Data (BlogPosting)

Use BlogPosting type with JSON-LD format for blog content:

json
{
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "headline": "Titel des Beitrags",
    "image": [
        "https://example.de/bild-16x9.webp",
        "https://example.de/bild-4x3.webp",
        "https://example.de/bild-1x1.webp"
    ],
    "datePublished": "2026-06-04T10:00:00+02:00",
    "dateModified": "2026-06-04T12:00:00+02:00",
    "author": {
        "@type": "Person",
        "name": "Autorenname",
        "url": "https://example.de/ueber-uns/"
    },
    "publisher": {
        "@type": "Organization",
        "name": "Firmenname",
        "url": "https://example.de/"
    }
}
PropertyNotes
headlineSame as title tag content
imageMultiple aspect ratios (1x1, 4x3, 16x9); min 1200 px wide
datePublished / dateModifiedISO 8601 with timezone
author.urlLink to author bio page (strongly recommended)

Additional Schema Types

BreadcrumbList

Use on every page for navigation path display in SERPs:

json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Blog", "item": "https://example.de/blog/" },
        { "@type": "ListItem", "position": 2, "name": "SEO Leitfaden", "item": "https://example.de/blog/seo-leitfaden/" }
    ]
}

FAQPage

Use when the post contains a dedicated FAQ section with question-answer pairs:

json
{
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
        {
            "@type": "Question",
            "name": "Wie lang sollte ein Title-Tag sein?",
            "acceptedAnswer": { "@type": "Answer", "text": "50-60 Zeichen bzw. max 580 Pixel Breite." }
        }
    ]
}

Combine multiple schema types on one page by wrapping them in a @graph array.

E-E-A-T Signals

DimensionHow to Signal
ExperienceAuthor bios, original photos, real examples, first-person accounts
ExpertiseNiche-focused depth, credentials, structured explanations
AuthoritativenessOriginal research, industry recognition, authoritative backlinks
TrustworthinessNamed bylines with bio links, accurate sources, "zuletzt geprüft" dates
AI contentMust be reviewed by SME, enriched with original insights, attributed to named author

Core Web Vitals

MetricGoodWhat it measures
LCP≤ 2.5 sLargest Contentful Paint — loading speed
INP≤ 200 msInteraction to Next Paint — responsiveness
CLS≤ 0.1Cumulative Layout Shift — visual stability

Mobile-First

RuleDetail
Content parityIdentical content, meta tags, structured data on mobile and desktop
Touch targetsMinimum 48×48 CSS px; 8 px spacing between targets
Viewport metaRequired: <meta name="viewport" content="width=device-width, initial-scale=1">
Page speed53% of mobile users leave if page takes >3 seconds

Robots Meta

DirectiveEffect
index, followDefault; no need to specify
noindexPage removed from index (must allow crawling for Google to see tag)
max-snippet:[n]Limit snippet to N characters
max-image-preview:largeAllow large image previews in SERPs

German SEO Specifics

Umlauts in URLs

CharacterURL replacement
äae
öoe
üue
ßss

Google treats "ue" the same as "ü" for keyword matching. Never just drop the dots (ü→u is wrong).

Flesch-Index (German Adaptation — Amstad 1978)

Formula: 180 - SL - (58.5 × WL) (SL = sentence length in words, WL = avg syllables per word)

ScoreInterpretation
60-70Gut lesbar für breites Publikum
50-60Empfohlen für SEO-Texte (YOAST)
30-50Anspruchsvoll, Fachpublikum
0-30Wissenschaftlich/technisch

German words are inherently longer (compound nouns), so scores are naturally lower than English.

Hreflang (DACH)

TagMarket
hreflang="de-DE"Germany
hreflang="de-AT"Austria
hreflang="de-CH"Switzerland
hreflang="de"Language-only fallback
hreflang="x-default"Fallback for non-matching users

Requirements: Bidirectional linking (all versions link to all others + self); absolute URLs; all return HTTP 200.

Legal Requirements (Trust Signals)

German sites require Impressum and Datenschutzerklärung — both affect trust signals and are legally mandatory.

Domain & Market

  • .de ccTLD provides strong geo-targeting signal for Germany
  • Google.de has ~90%+ market share in Germany
  • "Sie" vs "du" — consistency matters; trend 2025-2026 is "du" for B2C

Verlinkung mit Copywriter-Skills

Beim Schreiben von Texten gelten SEO-Limits UND Tonalitätsregeln gemeinsam:

TextartZusätzlich laden
Technische Blogbeiträge, Produkttexte, Feature-Ankündigungencopywriter-de
Landing Pages, Service-Seiten, Booking-Seiten, Sales Copymarketing-copywriter-de

Kein Widerspruch: Die Copywriter-Skills bestimmen Stimme, Rhythmus und Struktur. Dieser Skill bestimmt die technischen Limits (Zeichenlängen, Pixel, Heading-Hierarchie, Schema). Beide ergänzen sich.

Wichtig: Die H1 auf der Seite darf emotionaler und länger sein als der Title-Tag. Der Title-Tag ist für die SERPs optimiert (50-60 Zeichen), die H1 für den Leser auf der Seite.

Blog Post SEO Checklist

Use this checklist when writing or reviewing a blog post:

Content & Keywords:

  • Focus keyword appears in title, H1, meta description, URL slug, and first paragraph
  • Focus keyword is unique to this post (no keyword cannibalization)
  • Keyword density 1-2%, naturally distributed
  • Content length appropriate for type (see table above), minimum 300 words
  • Featured snippet paragraph (40-60 words) after key heading

Structure & Readability:

  • One H1 per page, heading hierarchy sequential (H1→H2→H3)
  • Max 300 words between subheadings
  • Flesch-Index 50-60 for German texts
  • Max 10% passive voice
  • Mind. 30% of sentences with transition words
  • Sentence length varies visibly

Meta & SERP:

  • Title: 50-60 characters, primary keyword near beginning, ≤580 px
  • Meta description: 120-158 characters, focus keyword included, CTA, value in first 120 chars
  • URL/slug: 3-5 words, lowercase, hyphens, keyword first, umlauts replaced
  • Canonical URL: Self-referencing, absolute HTTPS

Links:

  • Internal links: 2-5 per 1,000 words, descriptive anchor text
  • Outbound links: 1-2 authoritative external sources
  • No orphan pages — at least one internal link points to this post
  • Table of contents for posts >1,000 words

Images:

  • Alt text (80-140 chars), descriptive filenames, keyword-relevant
  • WebP/AVIF format, width/height attributes set
  • Hero image: loading="eager" + fetchpriority="high"; rest: loading="lazy"

Technical:

  • Schema.org: BlogPosting JSON-LD with headline, image, dates, author, publisher
  • Schema.org: BreadcrumbList JSON-LD for navigation path
  • Schema.org: FAQPage JSON-LD if post contains FAQ section
  • Open Graph: og:title, og:description, og:image (1200×630), og:type="article"
  • XML Sitemap: Post included with correct <lastmod>
  • Content freshness: "Zuletzt aktualisiert" date visible + dateModified in Schema

E-E-A-T:

  • Author byline with bio link
  • Specific claims backed by data or sources
  • "Zuletzt aktualisiert" date visible on page
  • Impressum and Datenschutzerklärung accessible

Mobile:

  • Content parity with desktop
  • Touch targets ≥48 px, viewport meta set
  • Page load <3 seconds on mobile

Sources

This skill was compiled from the following references (2025-2026):

Google Official:

Title & Meta:

Content & Readability:

URL & Slug:

Structured Data:

Image SEO:

Internal Linking:

Core Web Vitals:

E-E-A-T:

German SEO:

Existing Claude Code SEO Skills (inspiration):

Frequently asked questions

What does the Seo AI skill do?

Use when writing, reviewing, or optimizing blog posts, landing pages, meta tags, titles, descriptions, headings, URLs, or any user-facing web content for search engines. Triggers on SEO questions, content audits, structured data, Open Graph tags, schema markup, or on-page optimization. Also use for German-language SEO specifics (umlauts, hreflang, Flesch DE).

Why use Seo on TypingMind?

Because you install it once and use it with any model. Seo is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Seo in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/alpham8/agentic-webdev/tree/master/skills/seo. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Seo?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Seo?

As many as you like. As long as a model supports skills, you can use Seo with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Seo AI skill free?

It is published on GitHub by alpham8. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇