Agent skill

CMS Connection Setup for SEO Analysis

by nowork-studio in nowork-studio/notfair-plugin

Connects WordPress, Strapi, Contentful or Ghost to the notfair SEO tools by collecting credentials, testing the connection and saving them to .env.local.

MITAuto-check: notesMarketing & SEO

Install CMS Connection Setup for SEO Analysis

skills CLI
$ npx skills add nowork-studio/notfair-plugin --skill setup-cms -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nowork-studio/notfair-plugin setup-cms --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/nowork-studio/notfair-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/seo/setup-cms .claude/skills/setup-cms && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
setup-cms
GitHub stars
3.9k
Token cost
~2.2k tokens
SKILL.md length
882 words
Files
2
Skills in repo
48
Repo updated
First seen
Licence
MIT

At a glance

Connects WordPress, Strapi, Contentful or Ghost to the notfair SEO tools by collecting credentials, testing the connection and saving them to .env.local.

  • Works in 7 steps: Setup → Detect existing CMS configuration → Choose a CMS → …
  • Connecting a WordPress site to the SEO analysis tools
  • SKILL.md covers Step 0 — Setup, Step 1 — Detect existing CMS…, Step 2 — Choose a CMS and Step 3 — Credential setup by CMS, plus 3 more sections
  • Calls python3; needs WP_APP_PASSWORD and STRAPI_API_KEY

What it does

This skill walks you through linking a CMS to the notfair SEO analysis tools, so that seo-analysis can pull published content and compare it with Google Search Console data to find invisible pages, content gaps, stale articles and missing SEO fields. It first runs a detection script to see whether a CMS is already configured, and if one is, offers to reconfigure it, switch to another or just test the connection.

If nothing is set up, it asks which of four systems you use. WordPress needs the site URL, a username and an Application Password created in the admin profile, which can be revoked later and never exposes your main password. Strapi uses an API token, Contentful a Delivery API key and Ghost a Content API key. Values are collected one at a time, tested against the CMS and written to `.env.local`. The skill relies on the plugin's shared SEO scripts, found through its preamble file, and on python3.

When your agent uses it

  • Connecting a WordPress site to the SEO analysis tools
  • Adding a Strapi, Contentful or Ghost CMS as a content source
  • Finding out why a seo-analysis report shows no CMS data
  • Switching the connected CMS or re-testing an existing connection

Example prompts

  • “Connect my WordPress blog to the SEO tools so the analysis can see my posts.”
  • “Set up Contentful for seo-analysis using my Delivery API key.”
  • “My seo-analysis report has no CMS data. Check whether Ghost is configured and test the connection.”

Requirements

  • Python 3
  • The notfair SEO scripts and shared preamble from the same plugin
  • Admin access to the CMS to create an application password or API key
  • Pre-approved tools (allowed-tools): Bash, Read, Write, AskUserQuestion

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Setup
  2. Detect existing CMS configuration
  3. Choose a CMS
  4. Credential setup by CMS
  5. Write .env.local
  6. Test connection
  7. Confirm and summarize

What it can do on your machine

Read from SKILL.md and the folder at commit 1a53d4e. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • WP_APP_PASSWORD
    • STRAPI_API_KEY
    • CONTENTFUL_DELIVERY_TOKEN
    • GHOST_CONTENT_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

CMS Connection Setup for SEO Analysis loads about 2.2k tokens when it runs. Until then it costs about 126 tokens; SKILL.md has 882 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~126
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:7
    credentials to .env.local. Once set up, seo-analysis automatically cross-
  • NoteMentions a .env fileSKILL.md:102
    Write to `.env.local`:
  • NoteMentions a .env fileSKILL.md:136
    Write to `.env.local`:
  • NoteMentions a .env fileSKILL.md:170
    Write to `.env.local`:
  • NoteMentions a .env fileSKILL.md:201
    Write to `.env.local`:
  • NoteMentions a .env fileSKILL.md:210
    ## Step 4 — Write .env.local
  • NoteMentions a .env fileSKILL.md:212
    Find the project's `.env.local` file. Search for it:
  • NoteMentions a .env fileSKILL.md:215
    for candidate in ".env.local" "$HOME/.env.local"; do
  • NoteMentions a .env fileSKILL.md:218
    [ -z "$ENV_FILE" ] && ENV_FILE=".env.local"
  • NoteMentions a .env fileSKILL.md:267
    IT=2`** → credentials were removed from `.env.local` between steps. Restart from Step 3.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from nowork-studio/notfair-plugin at commit 1a53d4e, republished under its MIT licence (© nowork-studio). 882 words, ~2,168 tokens.

Download SKILL.mdSave it as .claude/skills/setup-cms/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
setup-cms
description
Connect a CMS to notfair SEO tools. Guides users through configuring WordPress, Strapi, Contentful, or Ghost — tests the connection, and writes credentials to .env.local. Once set up, seo-analysis automatically cross- references CMS content against Google Search Console data. Use whenever the user says "connect my CMS", "set up WordPress", "configure Strapi", "add Contentful", "connect Ghost", or "CMS setup". Also trigger if the user asks why no CMS data appears in a seo-analysis report.
allowed-tools
Bash, Read, Write, AskUserQuestion
argument-hint
<CMS name: wordpress, strapi, contentful, or ghost>

/setup-cms

Guide the user through connecting their CMS to notfair's SEO analysis tools.

Once configured, /seo-analysis automatically pulls published content from the CMS and cross-references it against Google Search Console data — finding invisible pages, content gaps, stale articles, and missing SEO fields.


Step 0 — Setup

Read and follow ../shared/preamble.md — it locates the SEO scripts directory. Use $SKILL_SCRIPTS from the preamble for all script calls below.

Step 1 — Detect existing CMS configuration

bash
CMS_TYPE=$(python3 "$SKILL_SCRIPTS/cms_detect.py" 2>/dev/null)
CMS_STATUS=$?
echo "CMS_TYPE=$CMS_TYPE  EXIT=$CMS_STATUS"
  • CMS_STATUS=0 → a CMS is already configured ($CMS_TYPE is the name). Show the user: "You already have [$CMS_TYPE] connected. Would you like to reconfigure it, or switch to a different CMS?" Wait for their reply. If they say reconfigure/switch, continue to Step 2. If they say test or verify, jump to Step 5 (skip to connection test).

  • CMS_STATUS=2 → nothing configured yet. Continue to Step 2.


Step 2 — Choose a CMS

Ask the user:

"Which CMS are you connecting? I support:

  1. WordPress — self-hosted or WordPress.com (uses REST API + Application Password)
  2. Strapi — v4 or v5, self-hosted (uses API Token)
  3. Contentful — cloud headless CMS (uses Delivery API key)
  4. Ghost — Ghost.org or self-hosted (uses Content API key)

Reply with the name or number."

Wait for their answer. Map to: wordpress, strapi, contentful, ghost.


Step 3 — Credential setup by CMS

Jump to the sub-section for the chosen CMS.


3A — WordPress

WordPress uses the built-in Application Passwords feature (introduced in WP 5.6). This is the safest way to grant API access — it never exposes your main password and can be revoked at any time.

Tell the user:

"I need three things to connect WordPress:

  1. Your WordPress URL (e.g. https://myblog.com)
  2. Your WordPress username (the one you log in with)
  3. An Application Password — create one in: WordPress Admin → Users → Profile → scroll to Application Passwords → enter a name like "notfair" → click Add New → copy the generated password

Paste each value when ready."

Collect values one at a time:

  1. Ask for WP_URL → validate it starts with http:// or https://
  2. Ask for WP_USERNAME
  3. Ask for WP_APP_PASSWORD
  4. Ask for WP_CONTENT_TYPE:

    "What content type should I analyze? Common values: posts, pages. Press Enter to use posts (default), or enter a custom post type slug."

Once all four are collected, continue to Step 4 (test connection).

Write to .env.local:

WP_URL=<value>
WP_USERNAME=<value>
WP_APP_PASSWORD=<value>
WP_CONTENT_TYPE=<value or posts>

3B — Strapi

Tell the user:

"I need two things to connect Strapi:

  1. Your Strapi URL (e.g. https://cms.example.com)
  2. A Full-access API Token — create one in: Strapi Admin → Settings → Global settings → API Tokens → Create new API Token → Type: Full access → copy the token

Optionally:

  • Content type — the plural API ID of your content collection (default: articles). Find it in: Content-Type Builder → [your type] → API ID (plural)
  • Strapi version — 4 or 5 (auto-detected if omitted)

Paste each value when ready."

Collect:

  1. STRAPI_URL
  2. STRAPI_API_KEY
  3. STRAPI_CONTENT_TYPE (optional, default: articles)
  4. STRAPI_VERSION (optional)

Write to .env.local:

STRAPI_URL=<value>
STRAPI_API_KEY=<value>
STRAPI_CONTENT_TYPE=<value or articles>

Include STRAPI_VERSION=<value> only if the user specified it.


3C — Contentful

Tell the user:

"I need three things to connect Contentful:

  1. Space ID — find it in: Contentful → Settings → General Settings → Space ID
  2. Content Delivery API token — find it in: Settings → API Keys → [your key] → Content Delivery API - access token (If no key exists, create one under Settings → API Keys → Add API Key)
  3. Content type ID — the API identifier for your content type. Find it in: Content model → [your type] → API Identifier

Optionally:

  • Environment (default: master)

Paste each value when ready."

Collect:

  1. CONTENTFUL_SPACE_ID
  2. CONTENTFUL_DELIVERY_TOKEN
  3. CONTENTFUL_CONTENT_TYPE
  4. CONTENTFUL_ENVIRONMENT (optional, default: master)

Write to .env.local:

CONTENTFUL_SPACE_ID=<value>
CONTENTFUL_DELIVERY_TOKEN=<value>
CONTENTFUL_CONTENT_TYPE=<value>
CONTENTFUL_ENVIRONMENT=<value or master>

Show full SKILL.md (304 more words)Show less
3D — Ghost

Tell the user:

"I need two things to connect Ghost:

  1. Your Ghost URL (e.g. https://myblog.ghost.io)
  2. Content API key — create one in: Ghost Admin → Settings → Integrations → Add custom integration → copy the Content API Key

Optionally:

  • Content type: posts (default) or pages

Paste each value when ready."

Collect:

  1. GHOST_URL
  2. GHOST_CONTENT_KEY
  3. GHOST_CONTENT_TYPE (optional, default: posts)

Write to .env.local:

GHOST_URL=<value>
GHOST_CONTENT_KEY=<value>
GHOST_CONTENT_TYPE=<value or posts>

Step 4 — Write .env.local

Find the project's .env.local file. Search for it:

bash
ENV_FILE=""
for candidate in ".env.local" "$HOME/.env.local"; do
  [ -f "$candidate" ] && ENV_FILE="$candidate" && break
done
[ -z "$ENV_FILE" ] && ENV_FILE=".env.local"
echo "Writing to: $ENV_FILE"

Merge strategy — do not overwrite the entire file. For each env var:

  1. If the key already exists in the file, replace that line.
  2. If it does not exist, append it to the end.

Read the file first (if it exists), then update key by key, then write back.

If the file doesn't exist yet, create it.

After writing, confirm:

"Credentials written to [path]. Testing connection now..."


Step 5 — Test connection

Run the appropriate preflight script and capture the exit code:

bash
# WordPress
python3 "$SKILL_SCRIPTS/preflight_wordpress.py" 2>&1; PREFLIGHT_EXIT=$?

# Strapi
python3 "$SKILL_SCRIPTS/preflight_strapi.py" 2>&1; PREFLIGHT_EXIT=$?

# Contentful
python3 "$SKILL_SCRIPTS/preflight_contentful.py" 2>&1; PREFLIGHT_EXIT=$?

# Ghost
python3 "$SKILL_SCRIPTS/preflight_ghost.py" 2>&1; PREFLIGHT_EXIT=$?

The 2>&1 redirect surfaces error messages in the output so you can show them.

PREFLIGHT_EXIT=0 — connection successful. Show the "OK: …" line to the user, then continue to Step 6.

PREFLIGHT_EXIT=1 — connection failed. Show the full error output verbatim. Help the user diagnose:

  • 401 Unauthorized → wrong token/password — suggest regenerating
  • 403 Forbidden → token lacks permission — suggest a Full Access / unrestricted token
  • 404 Not Found → wrong URL or wrong content type slug
  • Network error → URL unreachable — check the URL in a browser first

Ask: "Want to fix the credentials and try again (I'll go back to Step 3), or skip CMS setup for now?"

PREFLIGHT_EXIT=2 → credentials were removed from .env.local between steps. Restart from Step 3.


Step 6 — Confirm and summarize

Once the connection succeeds, show a summary:

CMS connected successfully!

  CMS:          [WordPress/Strapi/Contentful/Ghost]
  URL:          [cms_url]
  Content type: [content_type]
  Published:    [N] entries found

What this enables in /seo-analysis:
  • Cross-reference [N] published articles against Google Search Console data
  • Find published content with zero GSC impressions (unindexed or invisible)
  • Identify content gaps: queries ranking 11-30 with no matching article
  • Flag stale content: articles >6 months old with declining clicks
  • Audit SEO fields: missing meta titles/descriptions, length violations

Then offer:

"Run /seo-analysis to see a full audit with your CMS content included, or type /setup-cms again to connect a different CMS."

© nowork-studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in seo/setup-cms of nowork-studio/notfair-plugin.

  • SKILL.md
  • evals/evals.json

Open the folder on GitHubat commit 1a53d4e

Compare with similar skills

CMS Connection Setup for SEO Analysis next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

CMS Connection Setup for SEO Analysis compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
CMS Connection Setup for SEO Analysis this skillnowork-studio/notfair-plugin3.9k—~2.2kAutomated safety check: NotesMIT
SEO Implementindranilbanerjee/digital-marketing-pro8541 repos~2kAutomated safety check: PassMIT
Google SEO APIsAgriciDaniel/claude-seo18k1 repos~4.2kAutomated safety check: PassMIT
Blog GoogleAgriciDaniel/claude-blog2.3k1 repos~3.3kAutomated safety check: NotesMIT
SEO GodAKCodez/seo-god111—~2.2kAutomated safety check: PassMIT
SEO Coachakseolabs-seo/seo-coach145—~2.8kAutomated safety check: PassNone

Similar skills

  • SEO Implement

    indranilbanerjee/digital-marketing-pro

    Execute approved SEO changes on a connected WordPress or Webflow CMS — meta title/description updates, JSON-LD schema deployment, canonical URLs, 301/302 redirects, and Search Console indexing…

    854 GitHub starsUsed in 1 repo~2k tokens
    Marketing & SEOAuto-check passed
  • Google SEO APIs

    AgriciDaniel/claude-seo

    Pulls real Google data for SEO work: Search Console, PageSpeed Insights, CrUX field data, the Indexing API and GA4 organic traffic, through /seo google commands.

    18k GitHub starsUsed in 1 repo~4.2k tokens
    Marketing & SEOAuto-check passed
  • Blog Google

    AgriciDaniel/claude-blog

    Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…

    2.3k GitHub starsUsed in 1 repo~3.3k tokens
    Marketing & SEOAuto-check: notes
  • SEO God

    AKCodez/seo-god

    Agentic SEO operator for your own website: audits and fixes your site with OpenSEO, measures rankings + Google Search Console, works to get ChatGPT and other AI engines citing you, and schedules the…

    111 GitHub stars~2.2k tokensUpdated 2 mo ago
    Marketing & SEOAuto-check passed
  • SEO Coach

    akseolabs-seo/seo-coach

    Beginner-first SEO coaching for people who want to learn by doing one safe, verifiable step at a time.

    145 GitHub stars~2.8k tokensUpdated 1 mo ago
    Marketing & SEOAuto-check passed
  • Global SEO Growth

    minhnv0807/ai-business-skills

    Covers six SEO layers for a website: crawl and index audit, local SEO, search-intent content, AI search visibility, schema markup and backlink or directory distribution.

    608 GitHub stars~5k tokensUpdated 25 days ago
    Marketing & SEOAuto-check passed

More from nowork-studio/notfair-plugin

All 48 skills in this repo
  • Keyword Research

    nowork-studio/notfair-plugin

    Finds, scores and groups keywords from a seed term or niche for SEO and AI search content strategies, with intent labels, difficulty estimates and topic clusters.

    3.9k GitHub starsUsed in 1 repo~2.6k tokens
    Auto-check passed
  • SEO Audit with Search Console

    nowork-studio/notfair-plugin

    Runs a full SEO audit that combines Google Search Console, URL Inspection, PageSpeed Insights and a technical crawl, then ranks quick wins and a 30-day plan.

    3.9k GitHub starsUsed in 1 repo~15k tokens
    Auto-check: warnings
  • Broken Link Checker

    nowork-studio/notfair-plugin

    Crawls a website with a bundled Python script to find broken internal and outbound links, then reports them by status code with the pages they appear on.

    3.9k GitHub stars~507 tokensUpdated 6 days ago
    Auto-check passed
  • Meta Tags Optimizer

    nowork-studio/notfair-plugin

    Writes and improves title tags, meta descriptions, Open Graph and Twitter card tags for click-through, with character counts and A/B test variants.

    3.9k GitHub starsUsed in 1 repo~2.7k tokens
    Auto-check passed
  • Single-Page SEO Audit

    nowork-studio/notfair-plugin

    Audits one URL for content quality, E-E-A-T, search intent, on-page and technical signals, and produces a scored report with fixes.

    3.9k GitHub starsUsed in 1 repo~5k tokens
    Auto-check passed
  • Search Console Content Planner

    nowork-studio/notfair-plugin

    Turns Google Search Console data into a dated content calendar by finding striking-distance queries and unanswered intent, ready to hand to a writer.

    3.9k GitHub stars~2.4k tokensUpdated 6 days ago
    Auto-check passed

Categories

Questions about CMS Connection Setup for SEO Analysis

What does CMS Connection Setup for SEO Analysis do?

Connects WordPress, Strapi, Contentful or Ghost to the notfair SEO tools by collecting credentials, testing the connection and saving them to .env.local. This skill walks you through linking a CMS to the notfair SEO analysis tools, so that seo-analysis can pull published content and compare it with Google Search Console data to find invisible pages, content gaps, stale articles and missing SEO fields. It first runs a detection script to see whether a CMS is already configured, and if one is, offers to reconfigure it, switch to another or just test the connection.

When should I use CMS Connection Setup for SEO Analysis?

CMS Connection Setup for SEO Analysis fits situations like: connecting a WordPress site to the SEO analysis tools; adding a Strapi, Contentful or Ghost CMS as a content source; finding out why a seo-analysis report shows no CMS data; switching the connected CMS or re-testing an existing connection.

How do I install CMS Connection Setup for SEO Analysis in Claude Code?

Run `npx skills add nowork-studio/notfair-plugin --skill setup-cms -a claude-code`. Or copy the skill folder (seo/setup-cms in nowork-studio/notfair-plugin) into .claude/skills/setup-cms in your project. Claude Code loads it when a task matches its description.

How do I install CMS Connection Setup for SEO Analysis in Codex?

Run `npx skills add nowork-studio/notfair-plugin --skill setup-cms -a codex`. Or copy the skill folder (seo/setup-cms in nowork-studio/notfair-plugin) into .agents/skills/setup-cms in your project. Codex loads it when a task matches its description.

Can I use CMS Connection Setup for SEO Analysis in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nowork-studio/notfair-plugin --skill setup-cms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/setup-cms, .gemini/skills/setup-cms, .github/skills/setup-cms and .opencode/skills/setup-cms in your project.

What does CMS Connection Setup for SEO Analysis need to run?

Going by SKILL.md and its folder, CMS Connection Setup for SEO Analysis needs the command-line tools its instructions call (python3) and credentials named WP_APP_PASSWORD, STRAPI_API_KEY, CONTENTFUL_DELIVERY_TOKEN and GHOST_CONTENT_KEY. Our summary lists: Python 3; The notfair SEO scripts and shared preamble from the same plugin; Admin access to the CMS to create an application password or API key. Its frontmatter pre-approves these tools: Bash, Read, Write, AskUserQuestion.

Does CMS Connection Setup for SEO Analysis access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is CMS Connection Setup for SEO Analysis safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does CMS Connection Setup for SEO Analysis use?

CMS Connection Setup for SEO Analysis is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does CMS Connection Setup for SEO Analysis use?

About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to CMS Connection Setup for SEO Analysis?

Skills that share tags, products or a category with CMS Connection Setup for SEO Analysis: SEO Implement (indranilbanerjee/digital-marketing-pro, 854 stars), Google SEO APIs (AgriciDaniel/claude-seo, 18k stars), Blog Google (AgriciDaniel/claude-blog, 2.3k stars) and SEO God (AKCodez/seo-god, 111 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains CMS Connection Setup for SEO Analysis?

nowork-studio (a GitHub organization) maintains it in nowork-studio/notfair-plugin, which has 3,904 GitHub stars. The repository holds 48 skills in this directory. The repository was last updated on October 1, 2026.

Source: nowork-studio/notfair-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.