Moai Ref Seo logo

Moai Ref Seo

OrganizationPopular
modu-ai
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 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).

Overview

Publishermodu-ai
Repositorymoai-adk
Skill namemoai-ref-seo
Stars
1.2K
Forks
226
Bundled files
Instructions only
LicenseApache-2.0
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 modu-ai on GitHub. Read the source before you install it.

Installation

Install the Moai Ref 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/modu-ai/moai-adk/tree/main/.claude/skills/moai-ref-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/modu-ai/moai-adk.git /tmp/moai-adk
mkdir -p .claude/skills
cp -r /tmp/moai-adk/.claude/skills/moai-ref-seo .claude/skills/moai-ref-seo
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Moai Ref 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 Moai Ref 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 Moai Ref 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.

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.

RuleHow to check itFailure it prevents
Exactly one h1 per documentCount h1 elements in the rendered output of each pageCompeting topic signals leave the subject ambiguous
No skipped heading levelWalk the heading sequence; each descent moves by at most one levelSection nesting a parser cannot reconstruct
Every image carries alt textEach image element has a non-empty alt attribute, or an empty one paired with an explicit decorative markerMeaning locked inside a binary the parser cannot open
Anchor text names its destinationRead each link's text with the surrounding sentence hidden, then ask where it goesInstruction-shaped link text carries no signal about the target
Fragment targets resolveFor each in-page fragment link, confirm a matching identifier exists in the same rendered outputNavigation 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.

DecisionRule
Which address is canonicalPick one form per resource and declare it. The declared value must equal the address actually served
Trailing-slash variantsChoose one form and redirect the other permanently. Serving both splits one resource across two addresses
Case, query parameters, tracking suffixesNormalize before serving. A parameter that does not change the response must not mint a second address
Parameterized routesBuild the declared value from the resolved parameters, never from a fixed string shared across the whole route
Retiring an addressRedirect 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

FieldRuleRecurring defect
titleUnique per page, composed from a page-specific part plus a stable identifier for the siteThe scaffold's default survives to production on every route
meta descriptionUnique per page, written for a person reading a result snippetOne description copied everywhere, or prose that describes nothing
Indexing directiveSet a default for public pages, then narrow per page class. Authenticated areas and internal tools are excluded deliberately, not merely left unlinkedA private surface gets indexed because nothing declared otherwise
Social preview fieldsPresent and absolute. A relative address in a field a third party fetches resolves against the wrong hostA share card that renders blank off-site

Length budgets are a decision rule, not a constant: draft the text, observe where the consuming surface truncates it, then cut to what you observed. Placeholder detection belongs in the pre-ship check — scan the emitted output for the scaffold's own default strings and fail when one survives.

Structured Data

Serialized JSON-LD states what a page is. Its one hard constraint is correspondence with the visible page.

DecisionRule
Which types to emitDerive them from the page's actual role — an organization, a product, a piece of software, a place, an article. Emit the site-level type everywhere and the page-specific type only where it applies
Required fieldsEach type has a small mandatory core. Emit that core completely rather than emitting several types partially
Addresses inside the dataAbsolute, and resolving. Relative values are discarded without a warning
Several entities on one pageEmit one block holding all of them, give each a stable identifier, and cross-reference by identifier instead of nesting duplicate copies
PlacementKeep each type on the page it describes. A type repeated site-wide dilutes rather than reinforces

Mirroring rule — every claim in the serialized data needs a visible counterpart on the same page. A name, a description, a rating, or a question-and-answer pair that exists only in the markup is an assertion the reader cannot check, and it is now scored as a negative signal rather than a neutral one.

Entity Consistency

Structured data identifies an entity. Consistency is what makes that identity hold across independent sources.

SurfaceRequirement
Canonical nameOne spelling, one casing, one suffix — the same in the serialized data, the page copy, and the headings
Owned profile linksRestricted to accounts this entity itself administers, each confirmed to resolve rather than bounce to a sign-in wall
Contact detailsName, address, and contact number identical across the serialized data, the visible page, and any third-party listings
Omission over approximationA field with no accurate value is left out. A partial or invented one fragments the identity it was meant to establish

Formatting differences that read as trivial to a person are distinct values to a matcher. Fix one format per field and hold it everywhere the entity appears.

Host-Derived Crawl Artifacts

robots.txt and sitemap.xml are output the site serves, not files carried between environments.

ArtifactRule
robots.txtDerive the absolute addresses it contains from the incoming request's host, so every environment serves a correct description of itself
sitemap.xmlEnumerate the addresses actually served. An entry for a removed page spends crawl attempts and signals staleness
Staying in syncAdding or removing a route updates the enumeration in the same change. A hand-maintained list drifts within one iteration
Per-entry hintsFreshness and weighting hints attached to entries are advisory and widely discounted. Correctness of the address set matters far more than the hints on it

Hardcoding one environment's host into either artifact is the defect that keeps recurring, because it passes review while being correct in exactly one place.

Delivery Chokepoints

ConcernRule
Response headersApply them at a single wrapping point every response passes through, error and redirect responses included. A header set only on the success path is missing exactly when a reader is most likely to be misled
Rendering modeTreat "what does a reader receive in the first response?" as a question the project answers explicitly. Content that appears only after client-side work is content a non-executing reader may never see
Redirect chainsOne hop to the canonical address. Each extra hop is another opportunity to lose the reader
Third-party originsConnection hints for origins the page depends on belong ahead of the resources that use them. Measure the effect on this project's own pages rather than assuming one

Common Rationalizations

RationalizationReality
"The framework already sets sensible metadata defaults"A default is identical on every route by construction. Uniqueness is the entire purpose of the field, so it cannot be inherited.
"Both address forms serve the same page, so it makes no difference"Two addresses serving one resource are two resources to a crawler. Which one survives is guessed unless a declaration and a redirect settle it deliberately.
"Serialized data may say more than the page shows — it is extra context"Data with no visible counterpart is an unverifiable claim, and it is scored as one.
"Heading structure and alt text belong to accessibility, not to indexing"They are the parse structure a machine uses to segment and describe a page. Sharing a mechanism with accessibility is not a reason to defer them.
"The address enumeration can be updated in a follow-up change"A list maintained apart from the routes drifts immediately and then silently. Deriving it from the routes is the only version that stays true.
"The staging host in the artifact is fine, we swap it at deploy"A hardcoded host is right in one environment and wrong in every other, including the one that gets indexed.

Red Flags

  • Two or more h1 elements on one page, or a heading sequence that skips a level
  • A canonical declaration that does not match the address actually serving the page
  • The same title or meta description reused across more than one route
  • An image with no alt attribute, or alt text that repeats the file name
  • Link text that reads as an instruction instead of naming a destination
  • An in-page fragment link with no matching identifier in the rendered output
  • robots.txt or sitemap.xml carrying a hardcoded host instead of one derived from the request
  • Serialized JSON-LD asserting a name, description, or offer with no visible counterpart
  • A relative address in a field a third party fetches — a share-preview image, a structured-data logo
  • Response headers applied on the success path only, leaving redirect and error responses uncovered

Verification

  • Every rendered page has exactly one h1 and a heading sequence with no skipped level — report the counts observed, not the intent
  • Each route's canonical declaration was fetched and returned that same page with no redirect in between
  • title and meta description were collected across all routes; no duplicates and no scaffold default strings remain
  • Every image element has an alt attribute, and decorative images are marked as such on purpose
  • Every in-page fragment link was resolved against the rendered output of the page carrying it
  • robots.txt and sitemap.xml were fetched from the deployed host and every address in them resolves — quote the address set observed
  • Serialized JSON-LD parses, its addresses are absolute, and each claim it makes has a visible counterpart quoted from the page
  • Response headers were observed on a success response, on a redirect response, and on an error response

Frequently asked questions

What does the Moai Ref Seo AI skill do?

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 a...

Why use Moai Ref Seo on TypingMind?

Because you install it once and use it with any model. Moai Ref 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 Moai Ref Seo in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/modu-ai/moai-adk/tree/main/.claude/skills/moai-ref-seo. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Moai Ref 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 Moai Ref Seo?

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

Is the Moai Ref Seo AI skill free?

Yes. It is published on GitHub by modu-ai under the Apache-2.0 license. 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 👇