CommunityWriting & Editinggithub.com

umairmsm/wp-seo

Stage 5 of a wp-site-kit WordPress build - titles and descriptions, canonical URLs, one schema owner and JSON-LD, sitemaps, robots.txt and llms.txt, AI crawler access, redirects (301 vs 302), legacy URL maps, Search Console, and adding languages one pilot at a time with Polylang (hreflang, .po/.mo strings, native review). Use for "SEO", "schema", "redirect", "old URLs", "translate the site", "add French/Spanish", "hreflang", "canonical".

What is wp-seo?

wp-seo is a Claude Code agent skill that stage 5 of a wp-site-kit WordPress build - titles and descriptions, canonical URLs, one schema owner and JSON-LD, sitemaps, robots.txt and llms.txt, AI crawler access, redirects (301 vs 302), legacy URL maps, Search Console, and adding languages one pilot at a time with Polylang (hreflang, .po/.mo strings, native review). Use for "SEO", "schema", "redirect", "old URLs", "translate the site", "add French/Spanish", "hreflang", "canonical".

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/umairmsm/wp-site-kit/tree/HEAD/skills/wp-seo

Installed? Explore more Writing & Editing skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Stage 5: SEO and languages

Goal: search engines and AI assistants understand every page. Old URLs land in the right place. Each extra language is as correct as the original.

SEO steps

  1. One owner per job.
    • The SEO plugin (Rank Math by default) owns titles, meta, sitemaps and the main schema graph.
    • The core's schema.php adds the site's own types to that graph.
    • Silence any domain plugin that prints its own schema, so there is one graph, not two that disagree.
  2. Every page in tests/helpers/site.ts passes npm run test:seo:
    • title 10–65 characters;
    • description 50–160;
    • absolute canonical;
    • one H1;
    • lang attribute;
    • zero Google Fonts requests. Checklist and writing rules: references/seo-checklist.md.
  3. Structured data:
    • Organization (or LocalBusiness) once.
    • The item type per page (Service, Product, TouristTrip, Course, …).
    • Breadcrumbs.
    • FAQ only for questions really answered on the page.
    • Never an Offer without a price.
    • Validate with Google's Rich Results Test and the Schema.org validator.
  4. Robots, sitemap, llms.txt:
    • live allows crawling and lists the sitemap; staging blocks everything (the core does this);
    • /llms.txt is served by the core;
    • decide on purpose whether AI crawlers may read the site, then check the edge isn't blocking them by default (wp-ship > cloudflare-edge.md).
  5. Redirects: follow the project's docs/reference/REDIRECT_RULES.md. Map every old URL that has traffic or backlinks to its closest new page (301, one hop), and test each one.
  6. Parity before big changes. Before a redesign, migration or language launch, capture title, description, canonical and H1 for every URL. After each step, compare. Re-capture only for intended changes, with the reason in the commit.
  7. Search Console and Bing:
    • verify both;
    • submit the sitemap;
    • watch page indexing weekly for the first month;
    • Search Console keeps only 16 months of data, so export or turn on the bulk export early.

Language steps (each language is a pilot first)

Follow references/multilingual.md. In short:

  1. Rule zero: the original language doesn't change. Its URLs, titles, canonical tags and text stay identical (the parity check proves it).
  2. Pilot: the language foundation (Polylang, the switcher, hreflang, strings in .po/.mo), then the key pages and the top items. Then a native-speaker review on staging, then publish.
  3. The rest comes in batches, each through the same review.
  4. A language that isn't published yet answers 302 to the original language, and appears nowhere: not in sitemaps, hreflang, menus or the switcher.

Gate (tick in SITE_STATUS.md)

  • npm run test:seo green on staging; Rich Results test clean on one page of each type
  • Sitemap, robots.txt and llms.txt correct for live
  • Old-URL redirect map in place and tested (or "n/a")
  • Each extra language: pilot passed, native review done, hreflang pairs complete, canonical per language

Bugs we shipped once, so check for them

  • The translated home page's canonical pointed at the original home page, so Google would drop /fr/ from French results. The canonical of a translated page is the translated URL.
  • English JSON-LD on French pages: the schema must follow the page's language, or be left out until it is translated.
  • A gate that 301'd an unpublished language to the home page. Gates are 302s.

Individual skills in this repo

This repo contains 7 individual skills — each has its own dedicated page.

umairmsm/wp-build

Stage 3 of a wp-site-kit WordPress build - local DDEV site, the core must-use plugin (modules), the presentation-only child theme with skins, the content model (custom post types, meta, WP_Query, render functions), and the enquiry pipeline that saves leads before forwarding. Use when building or changing features, templates, content types, forms or plugin modules on a wp-site-kit site.

umairmsm/wp-content

Stage 4 of a wp-site-kit WordPress build - real copy and photos. Content truth (facts only from the owner), AI drafts and owner approval, claims audits, banned words and fake proof, legal pages, the photo pipeline (dedupe, real-only, EXIF strip, WebP sizes, alt text, AI image register), and recorded content changes. Use for "write the copy", "add photos", "the owner sent new photos", "check for duplicates", "update prices or text on the live site", "legal pages".

umairmsm/wp-design

Stage 2 of a wp-site-kit WordPress build - design direction, a static HTML/CSS prototype with design tokens, owner sign-off with screenshots, self-hosted fonts, and porting the approved look into a swappable WordPress skin. Use for "design the site", "new look", "redesign", "change colours or fonts", "make a new skin", "port the prototype to WordPress".

umairmsm/wp-kickoff

Stage 1 of a wp-site-kit WordPress build. Use when starting a new WordPress website or taking over or rebuilding an existing one - discovery brief, stack decision, creating the project with bin/wp-site-new, locked decisions, private repo and credentials inventory. Triggers - "new WordPress site", "start a client website", "rebuild this site", "take over this WordPress site".

umairmsm/wp-operate

Stage 8 of a wp-site-kit WordPress build and everything after launch - backups with an off-machine copy, restore drills, the disaster-recovery runbook, credentials inventory, update policy, alerts, and working from more than one machine (bridge file, workstation doctor, encrypted state bundle, rescuing unpushed work). Use for "backup", "restore", "move to a new machine/server", "update plugins", "what if the server dies", "work from the cloud box", "set up a second machine".

umairmsm/wp-ship

Stage 7 of a wp-site-kit WordPress build - staging behind Cloudflare Access, server hardening, safe deploys from a commit (scripts/deploy-safe.sh), database content changes, the launch audit, DNS cutover without breaking a running business, and the first week after launch. Use for "deploy", "set up staging", "go live", "launch", "cutover", "move DNS", "harden the server".

umairmsm/wp-site

Start here for any WordPress website built with wp-site-kit, from an empty folder to a live site. Use when someone says "build a WordPress site", "new website for a client", "where are we on the site", "what is next before launch", or asks to continue a site project. Finds the current stage from SITE_STATUS.md, applies the hard rules, and hands over to the right stage skill.

Related Skills