/moai-ref-seo
Search-visibility and crawlability reference for web output: canonical URL discipline, per-page title and meta description uniqueness, robots.txt and sitemap.xml as host-derived artifacts, JSON-LD structured data with entity consistency, and the document-semantics rules that
$ npx -y skills add modu-ai/moai-adk --skill moai-ref-seo --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/moai-ref-seo
Context preview
The summary Claude sees to decide when to auto-load this skill.
Search-visibility and crawlability reference for web output: canonical URL discipline, per-page title and meta description uniqueness, robots.txt and sitemap.xml as host-derived artifacts, JSON-LD structured data with entity consistency, and the document-semantics rules that
SKILL.md
moai-ref-seo.SKILL.mdname: moai-ref-seo
description: >
Search-visibility and crawlability reference for web output: canonical URL
discipline, per-page title and meta description uniqueness, robots.txt and
sitemap.xml as host-derived artifacts, JSON-LD structured data with entity
consistency, and the document-semantics rules that decide whether a machine can
read a page at all. Agent-extending skill that amplifies web-output implementation
and pre-ship review with production-grade indexing and structured-data patterns.
NOT for: keyboard operability, visible focus indicators, and form-control labeling
(accessibility owns those; delegated to the accessibility surface); generative-engine
optimization, deliberately excluded as insufficiently settled; visual polish and
interface detail (see moai-ref-ui-polish); API contract design (see
moai-ref-api-patterns); security headers and hardening (see moai-ref-owasp-checklist
and moai-ref-secops).
when_to_use: >
Use when a project emits pages that a search engine or an automated reader will
fetch: choosing canonical addresses, writing per-page metadata, emitting robots.txt
or sitemap.xml, adding or reviewing JSON-LD, keeping entity naming consistent
between the page and its serialized data, or auditing heading structure, image alt
text, anchor text, and in-page fragment targets before shipping. Guidance stays at
the protocol and output layer — addresses, response headers, markup, serialized
data — so it applies to any stack that produces HTML.
user-invocable: false
metadata:
version: "1.0.0"
category: "domain"
status: "active"
updated: "2026-08-01"
tags: "seo, canonical, structured-data, json-ld, sitemap, robots, metadata, crawlability, reference"
# MoAI Extension: Progressive Disclosure
progressive_disclosure:
enabled: true
level1_tokens: 100
level2_tokens: 3000
Search Visibility Reference
Target Agents
- `manager-develop` — applies these rules while implementing pages, routes, and serialized metadata output
- `/moai review` — pre-ship indexing review surface; equivalently available as a per-spawn `Agent(general-purpose)` with web-output review instructions
Core Principle
A page is indexed on what a machine can fetch and parse, not on what a person sees once everything has finished loading. Two failures dominate everything below: the same content reachable at more than one address, and a claim asserted in serialized data that nothing on the page corroborates. Every rule here is a specialization of one of those two.
Figures that engines publish and then quietly revise — truncation widths, ranking weights, crawl allowances — are deliberately absent. Where a limit matters, this reference gives the decision rule and the measurement to take, so the guidance outlives the figure.
Document Semantics
The structure a parser reads before it reaches any content signal. Cheapest class of defect to introduce, and the cheapest to detect.
| Rule | How to check it | Failure it prevents | |---|---|---| | Exactly one `h1` per document | Count `h1` elements in the rendered output of each page | Competing topic signals leave the subject ambiguous | | No skipped heading level | Walk the heading sequence; each descent moves by at most one level | Section nesting a parser cannot reconstruct | | Every image carries `alt` text | Each image element has a non-empty `alt` attribute, or an empty one paired with an explicit decorative marker | Meaning locked inside a binary the parser cannot open | | Anchor text names its destination | Read each link's text with the surrounding sentence hidden, then ask where it goes | Instruction-shaped link text carries no signal about the target | | Fragment targets resolve | For each in-page fragment link, confirm a matching identifier exists in the same rendered output | Navigation that silently lands nowhere |
Derive `alt` text from what the image depicts, never from its file name. Where an image genuinely adds nothing a reader needs, mark it decorative on purpose instead of inventing a description for it.
Identity and Canonical Address
One resource, one address; everything else redirects to it.
| Decision | Rule | |---|---| | Which address is canonical | Pick one form per resource and declare it. The declared value must equal the address actually served | | Trailing-slash variants | Choose one form and redirect the other permanently. Serving both splits one resource across two addresses | | Case, query parameters, tracking suffixes | Normalize before serving. A parameter that does not change the response must not mint a second address | | Parameterized routes | Build the declared value from the resolved parameters, never from a fixed string shared across the whole route | | Retiring an address | Redirect permanently from the old form and update the declaration in the same change |
A declaration pointing at an address that redirects, errors, or serves different content is worse than no declaration at all: it actively steers the reader away from the page it appears on.
Per-Page Metadata
| Field | Rule | Recurring defect | |---|---|---| | `title` | Unique per page, composed from a page-specific part plus a stable identifier for the site | The scaffold's default survives to production on every route | | meta description | Unique per page, written for a person reading a result snippet | One description copied everywhere, or prose that describes nothing | | Indexing directive | Set a default for public pages, then narrow per page class. Authenticated areas and internal tools are excluded deliberately, not merely left unlinked | A private surface gets indexed because nothing declared otherwise | | Social preview fields | Present and absolute. A relative address in a field a third party fetches resolves against the wrong host | A share card that renders blank off-site |
Length budgets are a decision rule, not a constant: draft the text, observe where the consuming surfac
Read more
name: moai-ref-seo description: > Search-visibility and crawlability reference for web output: canonical URL discipline, per-page title and meta description uniqueness, robots.txt and sitemap.xml as host-derived artifacts, JSON-LD structured data with entity consistency, and the document-semantics rules that decide whether a machine can read a page at all. Agent-extending skill that amplifies web-output implementation and pre-ship review with production-grade indexing and structured-data patterns. NOT for: keyboard operability, visible focus indicators, and form-control labeling (accessibility owns those; delegated to the accessibility surface); generative-engine optimization, deliberately excluded as insufficiently settled; visual polish and interface detail (see moai-ref-ui-polish); API contract design (see moai-ref-api-patterns); security headers and hardening (see moai-ref-owasp-checklist and moai-ref-secops). when_to_use: > Use when a project emits pages that a search engine or an automated reader will fetch: choosing canonical addresses, writing per-page metadata, emitting robots.txt or sitemap.xml, adding or reviewing JSON-LD, keeping entity naming consistent between the page and its serialized data, or auditing heading structure, image alt text, anchor text, and in-page fragment targets before shipping. Guidance stays at the protocol and output layer — addresses, response headers, markup, serialized data — so it applies to any stack that produces HTML. user-invocable: false metadata: version: "1.0.0" category: "domain" status: "active" updated: "2026-08-01" tags: "seo, canonical, structured-data, json-ld, sitemap, robots, metadata, crawlability, reference" # MoAI Extension: Progressive Disclosure progressive_disclosure: enabled: true level1_tokens: 100 level2_tokens: 3000
Search Visibility Reference
Target Agents
- `manager-develop` — applies these rules while implementing pages, routes, and serialized metadata output
- `/moai review` — pre-ship indexing review surface; equivalently available as a per-spawn `Agent(general-purpose)` with web-output review instructions
Core Principle
A page is indexed on what a machine can fetch and parse, not on what a person sees once everything has finished loading. Two failures dominate everything below: the same content reachable at more than one address, and a claim asserted in serialized data that nothing on the page corroborates. Every rule here is a specialization of one of those two.
Figures that engines publish and then quietly revise — truncation widths, ranking weights, crawl allowances — are deliberately absent. Where a limit matters, this reference gives the decision rule and the measurement to take, so the guidance outlives the figure.
Document Semantics
The structure a parser reads before it reaches any content signal. Cheapest class of defect to introduce, and the cheapest to detect.
| Rule | How to check it | Failure it prevents | |---|---|---| | Exactly one `h1` per document | Count `h1` elements in the rendered output of each page | Competing topic signals leave the subject ambiguous | | No skipped heading level | Walk the heading sequence; each descent moves by at most one level | Section nesting a parser cannot reconstruct | | Every image carries `alt` text | Each image element has a non-empty `alt` attribute, or an empty one paired with an explicit decorative marker | Meaning locked inside a binary the parser cannot open | | Anchor text names its destination | Read each link's text with the surrounding sentence hidden, then ask where it goes | Instruction-shaped link text carries no signal about the target | | Fragment targets resolve | For each in-page fragment link, confirm a matching identifier exists in the same rendered output | Navigation that silently lands nowhere |
Derive `alt` text from what the image depicts, never from its file name. Where an image genuinely adds nothing a reader needs, mark it decorative on purpose instead of inventing a description for it.
Identity and Canonical Address
One resource, one address; everything else redirects to it.
| Decision | Rule | |---|---| | Which address is canonical | Pick one form per resource and declare it. The declared value must equal the address actually served | | Trailing-slash variants | Choose one form and redirect the other permanently. Serving both splits one resource across two addresses | | Case, query parameters, tracking suffixes | Normalize before serving. A parameter that does not change the response must not mint a second address | | Parameterized routes | Build the declared value from the resolved parameters, never from a fixed string shared across the whole route | | Retiring an address | Redirect permanently from the old form and update the declaration in the same change |
A declaration pointing at an address that redirects, errors, or serves different content is worse than no declaration at all: it actively steers the reader away from the page it appears on.
Per-Page Metadata
| Field | Rule | Recurring defect | |---|---|---| | `title` | Unique per page, composed from a page-specific part plus a stable identifier for the site | The scaffold's default survives to production on every route | | meta description | Unique per page, written for a person reading a result snippet | One description copied everywhere, or prose that describes nothing | | Indexing directive | Set a default for public pages, then narrow per page class. Authenticated areas and internal tools are excluded deliberately, not merely left unlinked | A private surface gets indexed because nothing declared otherwise | | Social preview fields | Present and absolute. A relative address in a field a third party fetches resolves against the wrong host | A share card that renders blank off-site |
Length budgets are a decision rule, not a constant: draft the text, observe where the consuming surfac
Agentic development harness for Claude Code — SPEC-driven plan/run/sync, TRUST 5 quality gates, model+effort routing, and Claude×GLM multi-LLM cost control. Single Go binary, 16 languages, zero deps.
Repo: modu-ai/moai-adk
Other skills on moai-adk.
- /hns-lsel-applier
Local Self-Evolution Loop (LSEL) APPLY engine — the playback-only consumer of approved decision.json records that drives `.moai/hooks/lsel-apply.sh` for the GOOS-local PROPOSE→APPLY seam closure (SPEC-LSEL-LOCAL-EVOLUTION-001 M3). Reads an approved decision.json, validates the
Open skill - /hns-lsel-curator
Local Self-Evolution Loop (LSEL) curator — the CLUSTER + drain engine for the GOOS-local PROPOSE→APPLY seam closure (SPEC-LSEL-LOCAL-EVOLUTION-001). Companion-offset drain of .moai/lessons-inbox.jsonl with a drain-side severity filter that drops the ~65% Bash-timeout/sandbox
Open skill - /hns-moaiadk-best-practices
moai-adk-go best-practices reference for the 4 harness specialists (cli-template-specialist, quality-specialist, workflow-specialist, hook-ci-specialist). Covers TRUST 5 gates, Go test isolation (t.TempDir, no OTEL env in parallel tests), hardcoding-prevention rules (env
Open skill - /hns-moaiadk-dev-reference
moai-adk-go local dev reference — version management/release process (sec 5), shell-script hook development (sec 7), build & dev commands (sec 10). Load only when performing these specific tasks.
Open skill - /hns-moaiadk-patterns
moai-adk-go domain-patterns reference for the 4 harness specialists (cli-template-specialist, quality-specialist, workflow-specialist, hook-ci-specialist). Covers the CLI/template/config/hook/spec subsystem architecture, key source paths, the Pipeline specialist delegation map,
Open skill - /hns-oss-docs-i18n-rules
HARD i18n rules digest for the oss-docs harness specialists working on moai-adk-go README 4-locale set and the docs-site (adk.mo.ai.kr). Covers the canonical-locale chains, the 4-locale same-PR obligation, Mermaid TD-only, the no-emoji + icon-shortcode rule, emphasis-marker
Open skill

