{
  "spec": "https://agentskills.io/specification",
  "note": "Each skill is a folder in the Agent Skills format. Fetch its files into the folder your client loads skills from, keeping their paths. The files are served as they are in the repository.",
  "skills": [
    {
      "name": "mttr",
      "title": "mttr",
      "version": "1.2.1",
      "updated": "2026-10-23",
      "description": "Checks a website with mttr the way search engines and AI assistants read it, then works its fix list in order of worth. Connects over MCP, reads the brief, fixes the cause in the site's own code, proposes each change or ships it as the person allows, then reads the site again and compares. Use when asked to audit, check, improve or gate a site's SEO, GEO, AI visibility or AI citations, to check a page before it ships, or to run a weekly check on a site. Works without a key from mttr's free public tools and reports. Not for paid ads, and never a promise of rankings or citations.",
      "does": "Teaches your agent to use mttr end to end: connect, check a site or a page, read the brief, fix in order of worth, propose or ship as you allow, then read again and compare.",
      "page": "https://mttr.si/skills/mttr",
      "files": [
        {
          "path": "SKILL.md",
          "url": "https://mttr.si/skills/mttr/SKILL.md",
          "lines": 182,
          "bytes": 15799,
          "covers": "The six steps from reading the site to reading it again, how to connect with or without a key, how changes ship, and the report."
        },
        {
          "path": "references/tools.md",
          "url": "https://mttr.si/skills/mttr/references/tools.md",
          "lines": 975,
          "bytes": 44469,
          "covers": "Every MCP tool: what it does, its inputs, the API call it makes, and who may call it. Written from mttr’s own tool list."
        },
        {
          "path": "references/workflows.md",
          "url": "https://mttr.si/skills/mttr/references/workflows.md",
          "lines": 96,
          "bytes": 8279,
          "covers": "Worked loops: a new site start to finish, one page before or after it ships, before a pull request is merged, a weekly check, a site closed to crawlers, a site whose text is written by script, several claimed sites, and working with no key."
        },
        {
          "path": "references/reading-the-brief.md",
          "url": "https://mttr.si/skills/mttr/references/reading-the-brief.md",
          "lines": 70,
          "bytes": 5242,
          "covers": "What each part of the brief means, when to depart from its order of worth, the plan beside it, the same read as data, and the mistakes that cost time."
        },
        {
          "path": "references/confirming.md",
          "url": "https://mttr.si/skills/mttr/references/confirming.md",
          "lines": 148,
          "bytes": 9361,
          "covers": "Seeing a failure for yourself before changing code: what to fetch, pass and fail for the common rules, finding the one template, worked before and after examples, and where a rule misreads a page."
        },
        {
          "path": "references/shipping.md",
          "url": "https://mttr.si/skills/mttr/references/shipping.md",
          "lines": 85,
          "bytes": 5596,
          "covers": "Proposals and approvals: a worked proposal with its limits, what each answer means, what a pull request carries, and caches after a deploy."
        },
        {
          "path": "references/troubleshooting.md",
          "url": "https://mttr.si/skills/mttr/references/troubleshooting.md",
          "lines": 70,
          "bytes": 6505,
          "covers": "Checking the MCP connection by hand, and each refusal mttr gives, from a missing key to a read asked too soon, with its cause and fix."
        },
        {
          "path": "references/after-a-rescan.md",
          "url": "https://mttr.si/skills/mttr/references/after-a-rescan.md",
          "lines": 75,
          "bytes": 5158,
          "covers": "Every field of mttr_changes, the order to read them in, why a rule newly fails, and what to do when a fix does not show."
        }
      ],
      "tools": [
        "mttr_signup",
        "mttr_proposals",
        "mttr_claim",
        "mttr_claim_check",
        "mttr_propose",
        "mttr_log_work",
        "mttr_site",
        "mttr_brief",
        "mttr_plan",
        "mttr_pages",
        "mttr_page",
        "mttr_changes",
        "mttr_links",
        "mttr_structure",
        "mttr_topics",
        "mttr_map",
        "mttr_tells",
        "mttr_rescan",
        "mttr_todo",
        "mttr_job",
        "mttr_queue",
        "mttr_rules",
        "mttr_examples",
        "mttr_proposal",
        "mttr_approvals_set",
        "mttr_queue_done",
        "mttr_product_check",
        "mttr_traffic",
        "mttr_queries",
        "mttr_visits",
        "mttr_agent_view",
        "mttr_progress_link",
        "mttr_compare",
        "mttr_competitors",
        "mttr_near"
      ],
      "sources": [
        {
          "title": "Google Search Essentials",
          "url": "https://developers.google.com/search/docs/essentials",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "What Google asks of every page it shows"
        },
        {
          "title": "AI features and your website",
          "url": "https://developers.google.com/search/docs/appearance/ai-features",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "How Google's AI features choose and show a site's pages"
        },
        {
          "title": "Robots.txt Introduction and Guide",
          "url": "https://developers.google.com/search/docs/crawling-indexing/robots/intro",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Robots.txt controls which addresses a crawler may fetch, and is not a way to keep a page out of Google"
        },
        {
          "title": "Block Search Indexing with noindex",
          "url": "https://developers.google.com/search/docs/crawling-indexing/block-indexing",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The robots meta tag and the X-Robots-Tag header have the same effect, so check both"
        },
        {
          "title": "How to Specify a Canonical with rel=\"canonical\" and Other Methods",
          "url": "https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The canonical link belongs in the head, and an absolute address is safer than a relative one"
        },
        {
          "title": "Understand JavaScript SEO Basics",
          "url": "https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "A page whose first HTML is an app shell needs its script run before its text can be seen"
        },
        {
          "title": "URL Inspection tool",
          "url": "https://support.google.com/webmasters/answer/9012289",
          "by": "Search Console Help",
          "group": "Google Search Central",
          "uses": "Search Console's live test fetches a page as Google does now, apart from the version Google last indexed, for a site the person has in Search Console"
        },
        {
          "title": "What is the Model Context Protocol (MCP)?",
          "url": "https://modelcontextprotocol.io",
          "by": "Model Context Protocol",
          "group": "Standards and protocols",
          "uses": "The protocol mttr's tools are offered over"
        },
        {
          "title": "Transports",
          "url": "https://modelcontextprotocol.io/specification/2025-06-18/basic/transports",
          "by": "Model Context Protocol",
          "group": "Standards and protocols",
          "uses": "Each JSON-RPC message is its own HTTP POST to one endpoint, with an Accept header listing application/json and text/event-stream"
        },
        {
          "title": "Authorization",
          "url": "https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization",
          "by": "Model Context Protocol",
          "group": "Standards and protocols",
          "uses": "A client sends its token in the Authorization header as a bearer token on every request, and an invalid or expired token gets a 401"
        },
        {
          "title": "429 Too Many Requests",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Status/429",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "What the status means, and that a server may send Retry-After to say how long to wait"
        },
        {
          "title": "Cache-Control header",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "How max-age and s-maxage set how long browsers and shared caches such as a CDN keep a response"
        }
      ],
      "changelog": "https://mttr.si/skills/mttr/CHANGELOG.md",
      "install": {
        "claude-code": {
          "folder": ".claude/skills/mttr",
          "unix": "mkdir -p .claude/skills/mttr/references && curl -fsSL https://mttr.si/skills/mttr/SKILL.md -o .claude/skills/mttr/SKILL.md && curl -fsSL https://mttr.si/skills/mttr/references/tools.md -o .claude/skills/mttr/references/tools.md && curl -fsSL https://mttr.si/skills/mttr/references/workflows.md -o .claude/skills/mttr/references/workflows.md && curl -fsSL https://mttr.si/skills/mttr/references/reading-the-brief.md -o .claude/skills/mttr/references/reading-the-brief.md && curl -fsSL https://mttr.si/skills/mttr/references/confirming.md -o .claude/skills/mttr/references/confirming.md && curl -fsSL https://mttr.si/skills/mttr/references/shipping.md -o .claude/skills/mttr/references/shipping.md && curl -fsSL https://mttr.si/skills/mttr/references/troubleshooting.md -o .claude/skills/mttr/references/troubleshooting.md && curl -fsSL https://mttr.si/skills/mttr/references/after-a-rescan.md -o .claude/skills/mttr/references/after-a-rescan.md",
          "windows": "New-Item -ItemType Directory -Force .claude\\skills\\mttr\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/mttr/SKILL.md -OutFile .claude\\skills\\mttr\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/tools.md -OutFile .claude\\skills\\mttr\\references\\tools.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/workflows.md -OutFile .claude\\skills\\mttr\\references\\workflows.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/reading-the-brief.md -OutFile .claude\\skills\\mttr\\references\\reading-the-brief.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/confirming.md -OutFile .claude\\skills\\mttr\\references\\confirming.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/shipping.md -OutFile .claude\\skills\\mttr\\references\\shipping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/troubleshooting.md -OutFile .claude\\skills\\mttr\\references\\troubleshooting.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/after-a-rescan.md -OutFile .claude\\skills\\mttr\\references\\after-a-rescan.md -UseBasicParsing"
        },
        "codex": {
          "folder": ".agents/skills/mttr",
          "unix": "mkdir -p .agents/skills/mttr/references && curl -fsSL https://mttr.si/skills/mttr/SKILL.md -o .agents/skills/mttr/SKILL.md && curl -fsSL https://mttr.si/skills/mttr/references/tools.md -o .agents/skills/mttr/references/tools.md && curl -fsSL https://mttr.si/skills/mttr/references/workflows.md -o .agents/skills/mttr/references/workflows.md && curl -fsSL https://mttr.si/skills/mttr/references/reading-the-brief.md -o .agents/skills/mttr/references/reading-the-brief.md && curl -fsSL https://mttr.si/skills/mttr/references/confirming.md -o .agents/skills/mttr/references/confirming.md && curl -fsSL https://mttr.si/skills/mttr/references/shipping.md -o .agents/skills/mttr/references/shipping.md && curl -fsSL https://mttr.si/skills/mttr/references/troubleshooting.md -o .agents/skills/mttr/references/troubleshooting.md && curl -fsSL https://mttr.si/skills/mttr/references/after-a-rescan.md -o .agents/skills/mttr/references/after-a-rescan.md",
          "windows": "New-Item -ItemType Directory -Force .agents\\skills\\mttr\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/mttr/SKILL.md -OutFile .agents\\skills\\mttr\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/tools.md -OutFile .agents\\skills\\mttr\\references\\tools.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/workflows.md -OutFile .agents\\skills\\mttr\\references\\workflows.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/reading-the-brief.md -OutFile .agents\\skills\\mttr\\references\\reading-the-brief.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/confirming.md -OutFile .agents\\skills\\mttr\\references\\confirming.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/shipping.md -OutFile .agents\\skills\\mttr\\references\\shipping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/troubleshooting.md -OutFile .agents\\skills\\mttr\\references\\troubleshooting.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/after-a-rescan.md -OutFile .agents\\skills\\mttr\\references\\after-a-rescan.md -UseBasicParsing"
        },
        "cursor": {
          "folder": ".cursor/skills/mttr",
          "unix": "mkdir -p .cursor/skills/mttr/references && curl -fsSL https://mttr.si/skills/mttr/SKILL.md -o .cursor/skills/mttr/SKILL.md && curl -fsSL https://mttr.si/skills/mttr/references/tools.md -o .cursor/skills/mttr/references/tools.md && curl -fsSL https://mttr.si/skills/mttr/references/workflows.md -o .cursor/skills/mttr/references/workflows.md && curl -fsSL https://mttr.si/skills/mttr/references/reading-the-brief.md -o .cursor/skills/mttr/references/reading-the-brief.md && curl -fsSL https://mttr.si/skills/mttr/references/confirming.md -o .cursor/skills/mttr/references/confirming.md && curl -fsSL https://mttr.si/skills/mttr/references/shipping.md -o .cursor/skills/mttr/references/shipping.md && curl -fsSL https://mttr.si/skills/mttr/references/troubleshooting.md -o .cursor/skills/mttr/references/troubleshooting.md && curl -fsSL https://mttr.si/skills/mttr/references/after-a-rescan.md -o .cursor/skills/mttr/references/after-a-rescan.md",
          "windows": "New-Item -ItemType Directory -Force .cursor\\skills\\mttr\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/mttr/SKILL.md -OutFile .cursor\\skills\\mttr\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/tools.md -OutFile .cursor\\skills\\mttr\\references\\tools.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/workflows.md -OutFile .cursor\\skills\\mttr\\references\\workflows.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/reading-the-brief.md -OutFile .cursor\\skills\\mttr\\references\\reading-the-brief.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/confirming.md -OutFile .cursor\\skills\\mttr\\references\\confirming.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/shipping.md -OutFile .cursor\\skills\\mttr\\references\\shipping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/troubleshooting.md -OutFile .cursor\\skills\\mttr\\references\\troubleshooting.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/after-a-rescan.md -OutFile .cursor\\skills\\mttr\\references\\after-a-rescan.md -UseBasicParsing"
        },
        "other": {
          "folder": "docs/mttr",
          "unix": "mkdir -p docs/mttr/references && curl -fsSL https://mttr.si/skills/mttr/SKILL.md -o docs/mttr/SKILL.md && curl -fsSL https://mttr.si/skills/mttr/references/tools.md -o docs/mttr/references/tools.md && curl -fsSL https://mttr.si/skills/mttr/references/workflows.md -o docs/mttr/references/workflows.md && curl -fsSL https://mttr.si/skills/mttr/references/reading-the-brief.md -o docs/mttr/references/reading-the-brief.md && curl -fsSL https://mttr.si/skills/mttr/references/confirming.md -o docs/mttr/references/confirming.md && curl -fsSL https://mttr.si/skills/mttr/references/shipping.md -o docs/mttr/references/shipping.md && curl -fsSL https://mttr.si/skills/mttr/references/troubleshooting.md -o docs/mttr/references/troubleshooting.md && curl -fsSL https://mttr.si/skills/mttr/references/after-a-rescan.md -o docs/mttr/references/after-a-rescan.md && echo \"For checking and fixing a site with mttr, follow docs/mttr/SKILL.md.\" >> AGENTS.md",
          "windows": "New-Item -ItemType Directory -Force docs\\mttr\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/mttr/SKILL.md -OutFile docs\\mttr\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/tools.md -OutFile docs\\mttr\\references\\tools.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/workflows.md -OutFile docs\\mttr\\references\\workflows.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/reading-the-brief.md -OutFile docs\\mttr\\references\\reading-the-brief.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/confirming.md -OutFile docs\\mttr\\references\\confirming.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/shipping.md -OutFile docs\\mttr\\references\\shipping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/troubleshooting.md -OutFile docs\\mttr\\references\\troubleshooting.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/mttr/references/after-a-rescan.md -OutFile docs\\mttr\\references\\after-a-rescan.md -UseBasicParsing; Add-Content AGENTS.md \"For checking and fixing a site with mttr, follow docs/mttr/SKILL.md.\""
        }
      }
    },
    {
      "name": "mttr-page-system",
      "title": "Page system",
      "version": "1.3.1",
      "updated": "2026-10-23",
      "description": "Builds a site's page templates and shared components so search engines and AI assistants read every page well, and proves each pattern with mttr. Covers one h1 and a real outline, landmarks, an answer-first opening, structured data for each kind of page, share tags, canonical and indexing, internal links and hubs, images, speed and contrast, spacing on one scale with an even rhythm, and moving an existing site onto it a template at a time. Use when building or reworking a site's layout, page templates, components or design system, adding a new kind of page, or when mttr findings point at a shared template. About the structure of pages and their spacing, not their colour, type or brand.",
      "does": "Builds a site’s page templates and shared components so crawlers and assistants read every page well, and proves each pattern with mttr. About structure and spacing, not color, type or brand.",
      "page": "https://mttr.si/skills/page-system",
      "files": [
        {
          "path": "SKILL.md",
          "url": "https://mttr.si/skills/page-system/SKILL.md",
          "lines": 194,
          "bytes": 17005,
          "covers": "The eight steps from naming each kind of page to setting its spacing and proving each pattern with mttr, and the table of patterns, rules and free checks."
        },
        {
          "path": "references/page-kinds.md",
          "url": "https://mttr.si/skills/page-system/references/page-kinds.md",
          "lines": 204,
          "bytes": 10460,
          "covers": "A template for the home, service, product, article, hub and plain pages: the outline, the structured data, the links in and out, the rules each answers, how mttr files a page, and a service template before and after."
        },
        {
          "path": "references/structured-data.md",
          "url": "https://mttr.si/skills/page-system/references/structured-data.md",
          "lines": 246,
          "bytes": 13852,
          "covers": "JSON-LD for each kind of page, how to escape it, FAQ only where it is real, what never to mark up, a full article graph, Google’s required fields, building a block from data and what breaks it, and Google’s and schema.org’s pages for each type."
        },
        {
          "path": "references/components.md",
          "url": "https://mttr.si/skills/page-system/references/components.md",
          "lines": 173,
          "bytes": 8154,
          "covers": "The frame, breadcrumb, question and answer, table, image, byline, sources, contact block, footer and links in the text, each as the HTML it should send."
        },
        {
          "path": "references/outline-and-accessibility.md",
          "url": "https://mttr.si/skills/page-system/references/outline-and-accessibility.md",
          "lines": 102,
          "bytes": 7076,
          "covers": "How mttr reads each heading rule, an outline before and after, landmarks and the skip link, language, focus and accordions, and how to check each."
        },
        {
          "path": "references/links-and-hubs.md",
          "url": "https://mttr.si/skills/page-system/references/links-and-hubs.md",
          "lines": 127,
          "bytes": 8149,
          "covers": "The tree from home to hubs to pages, hub and spoke worked, links a crawler can follow, paged lists, town pages that read as doorways, and the sitemap."
        },
        {
          "path": "references/images-and-speed.md",
          "url": "https://mttr.si/skills/page-system/references/images-and-speed.md",
          "lines": 92,
          "bytes": 6730,
          "covers": "Alt text decided case by case, the image element before and after, the order of speed work, and the commands that check compression and first byte."
        },
        {
          "path": "references/spacing.md",
          "url": "https://mttr.si/skills/page-system/references/spacing.md",
          "lines": 105,
          "bytes": 6493,
          "covers": "Finding the scale a site already uses, writing it as tokens for CSS or Tailwind, moving every padding, margin and gap onto it a component at a time, and a measure to run in the browser before and after."
        },
        {
          "path": "references/spacing-traits.md",
          "url": "https://mttr.si/skills/page-system/references/spacing-traits.md",
          "lines": 135,
          "bytes": 7681,
          "covers": "The spacing rules, one to a section with an id that stays the same: twelve measured by code and four judged from screenshots, each with a bad and a good example."
        },
        {
          "path": "scripts/measure.mjs",
          "url": "https://mttr.si/skills/page-system/scripts/measure.mjs",
          "lines": 317,
          "bytes": 19753,
          "covers": "Measures a page against the twelve measured spacing traits at 1440 and 375 wide, in the Chrome already on the machine, with nothing to install. Exits 1 when a trait fails."
        },
        {
          "path": "references/migration.md",
          "url": "https://mttr.si/skills/page-system/references/migration.md",
          "lines": 87,
          "bytes": 7466,
          "covers": "Moving a live site onto the system a template at a time: the order of releases, what not to change, moving an address, and notes for Next.js, Shopify, WordPress and single page apps."
        },
        {
          "path": "references/troubleshooting.md",
          "url": "https://mttr.si/skills/page-system/references/troubleshooting.md",
          "lines": 49,
          "bytes": 6121,
          "covers": "A rule that still fails after the fix, by symptom, cause and fix, and the traps that look like success."
        }
      ],
      "tools": [
        "mttr_site",
        "mttr_brief",
        "mttr_pages",
        "mttr_schema_create",
        "mttr_structure",
        "mttr_rules",
        "mttr_rescan",
        "mttr_job",
        "mttr_changes",
        "mttr_product_check",
        "mttr_page",
        "mttr_agent_view",
        "mttr_map",
        "mttr_links"
      ],
      "sources": [
        {
          "title": "Rich Results Test",
          "url": "https://search.google.com/test/rich-results",
          "by": "Google Search Console",
          "group": "Google Search Central",
          "uses": "Google's own read of one page"
        },
        {
          "title": "Introduction to structured data markup in Google Search",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Why JSON-LD, and how Google reads it"
        },
        {
          "title": "General structured data guidelines",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/sd-policies",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Markup only for what the page shows, on the page it describes"
        },
        {
          "title": "Organization (Organization) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/organization",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The fields for the home page's Organization, the logo's size, and the home or about page as its place"
        },
        {
          "title": "Local business (LocalBusiness) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/local-business",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "`name` and `address` as required, the phone with its country code, and the format of opening hours"
        },
        {
          "title": "Article (Article, NewsArticle, BlogPosting) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/article",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The recommended properties, the author rules, dates with a time zone, and the image sizes"
        },
        {
          "title": "Breadcrumb (BreadcrumbList) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/breadcrumb",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "At least two items, no `item` needed on the last, and a trail that follows a person's path"
        },
        {
          "title": "Latest documentation updates",
          "url": "https://developers.google.com/search/updates#removing-faq-rich-result",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Google's note that FAQ results are no longer shown in Search"
        },
        {
          "title": "Influencing your title links in search results",
          "url": "https://developers.google.com/search/docs/appearance/title-link",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "What makes a good title in the frame"
        },
        {
          "title": "Control your snippets in search results",
          "url": "https://developers.google.com/search/docs/appearance/snippet",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The meta description and how Google uses it"
        },
        {
          "title": "How to specify a canonical URL with rel=\"canonical\" and other methods",
          "url": "https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "One address for each page"
        },
        {
          "title": "Block Search indexing with noindex",
          "url": "https://developers.google.com/search/docs/crawling-indexing/block-indexing",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "`noindex` in a meta tag or the `X-Robots-Tag` header"
        },
        {
          "title": "Link best practices for Google",
          "url": "https://developers.google.com/search/docs/crawling-indexing/links-crawlable",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "What makes a link crawlable, anchor text, and a link to every page that matters"
        },
        {
          "title": "Google image SEO best practices",
          "url": "https://developers.google.com/search/docs/appearance/google-images",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Alt text, the `img` element over CSS images, `srcset` with a `src` fallback, and file names"
        },
        {
          "title": "URL structure best practices for Google Search",
          "url": "https://developers.google.com/search/docs/crawling-indexing/url-structure",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Words with hyphens, one case, no fragments for content, and root-relative links"
        },
        {
          "title": "Pagination, incremental page loading, and their impact on Google Search",
          "url": "https://developers.google.com/search/docs/specialty/ecommerce/pagination-and-incremental-page-loading",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "A canonical for each page of a list, links to the next and the first, and load more given addresses"
        },
        {
          "title": "Build and submit a sitemap",
          "url": "https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Full canonical addresses, accurate lastmod, the size limits, and the robots.txt line"
        },
        {
          "title": "Spam policies for Google web search",
          "url": "https://developers.google.com/search/docs/essentials/spam-policies",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Doorway abuse and scaled content abuse, the risk in town pages that swap only a name"
        },
        {
          "title": "Understand the JavaScript SEO basics",
          "url": "https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Rendering, why server rendering is still advised, and that not every bot runs script"
        },
        {
          "title": "How to move a site",
          "url": "https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Mapping old addresses, permanent server-side redirects in one hop, updating links and sitemaps, and keeping redirects a year or more"
        },
        {
          "title": "Redirects and Google Search",
          "url": "https://developers.google.com/search/docs/crawling-indexing/301-redirects",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Which redirects Google reads as permanent and which as temporary, and why server-side is best"
        },
        {
          "title": "LocalBusiness",
          "url": "https://schema.org/LocalBusiness",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "The type and its properties"
        },
        {
          "title": "Service",
          "url": "https://schema.org/Service",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "The type for a service page"
        },
        {
          "title": "Article",
          "url": "https://schema.org/Article",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "The type for an article page"
        },
        {
          "title": "BreadcrumbList",
          "url": "https://schema.org/BreadcrumbList",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "The type for the trail"
        },
        {
          "title": "FAQPage",
          "url": "https://schema.org/FAQPage",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "The type for questions and answers the page shows"
        },
        {
          "title": "OpeningHoursSpecification",
          "url": "https://schema.org/OpeningHoursSpecification",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "The type for opening hours, with `dayOfWeek`, `opens` and `closes`"
        },
        {
          "title": "How to implement JSON-LD in your Next.js application",
          "url": "https://github.com/vercel/next.js/blob/canary/docs/01-app/02-guides/json-ld.mdx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "Next.js's own guide to JSON-LD in a server component, with the `<` escape"
        },
        {
          "title": "generateMetadata",
          "url": "https://github.com/vercel/next.js/blob/canary/docs/01-app/03-api-reference/04-functions/generate-metadata.mdx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "The metadata object and function, the canonical and share fields, and that they run only in server components"
        },
        {
          "title": "sitemap.xml",
          "url": "https://github.com/vercel/next.js/blob/canary/docs/01-app/03-api-reference/03-file-conventions/01-metadata/sitemap.mdx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "`app/sitemap.ts`, a sitemap made by a function from the site's data"
        },
        {
          "title": "robots.txt",
          "url": "https://github.com/vercel/next.js/blob/canary/docs/01-app/03-api-reference/03-file-conventions/01-metadata/robots.mdx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "`app/robots.ts`, with the line that names the sitemap"
        },
        {
          "title": "Layouts",
          "url": "https://shopify.dev/docs/storefronts/themes/architecture/layouts",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "`theme.liquid` as the layout every template is drawn through"
        },
        {
          "title": "Liquid filters: json",
          "url": "https://shopify.dev/docs/api/liquid/filters/json",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "What Shopify's `json` filter escapes, and what it does not say it escapes"
        },
        {
          "title": "Web Content Accessibility Guidelines (WCAG) 2.2",
          "url": "https://www.w3.org/TR/WCAG22/#contrast-minimum",
          "by": "W3C",
          "group": "Standards and protocols",
          "uses": "Success criterion 1.4.3, the contrast every theme meets"
        },
        {
          "title": "Web Vitals",
          "url": "https://web.dev/articles/vitals",
          "by": "Google, on web.dev",
          "group": "Standards and protocols",
          "uses": "The shared yardstick for how fast a page answers"
        },
        {
          "title": "The Open Graph protocol",
          "url": "https://ogp.me/",
          "by": "The Open Graph protocol",
          "group": "Standards and protocols",
          "uses": "The share tags in the frame"
        },
        {
          "title": "Headings",
          "url": "https://www.w3.org/WAI/tutorials/page-structure/headings/",
          "by": "W3C",
          "group": "Standards and protocols",
          "uses": "W3C WAI's Page Structure Tutorial on heading ranks, skipping levels and fixed sections"
        },
        {
          "title": "Landmark Regions",
          "url": "https://www.w3.org/WAI/ARIA/apg/practices/landmark-regions/",
          "by": "W3C",
          "group": "Standards and protocols",
          "uses": "One top-level main, labels for repeated landmarks, and labels that do not repeat the role"
        },
        {
          "title": "Web Content Accessibility Guidelines (WCAG) 2.2",
          "url": "https://www.w3.org/TR/WCAG22/",
          "by": "W3C",
          "group": "Standards and protocols",
          "uses": "Success criteria 1.3.1, 2.4.1, 2.4.6, 2.4.11 and 3.1.1, the structure, skip link, headings, focus and language this file asks for"
        },
        {
          "title": "h1 to h6, the HTML section heading elements",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "Not resizing text with headings, not skipping levels, and one `h1` as the better practice"
        },
        {
          "title": "Optimize Largest Contentful Paint",
          "url": "https://web.dev/articles/optimize-lcp",
          "by": "Google, on web.dev",
          "group": "Standards and protocols",
          "uses": "Never lazy load the main image, high fetch priority, the image findable in the HTML, and time to first byte"
        },
        {
          "title": "Browser-level image lazy loading for the web",
          "url": "https://web.dev/articles/browser-level-image-lazy-loading",
          "by": "Google, on web.dev",
          "group": "Standards and protocols",
          "uses": "Lazy only below the first screen, and `width` and `height` on every image"
        },
        {
          "title": "An alt Decision Tree",
          "url": "https://www.w3.org/WAI/tutorials/images/decision-tree/",
          "by": "W3C",
          "group": "Standards and protocols",
          "uses": "W3C WAI's order for choosing alt text, which the table above follows"
        },
        {
          "title": "The Image Embed element",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/img",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "`alt=\"\"`, `srcset` and `sizes`, `width` and `height`, `fetchpriority` and `decoding`"
        }
      ],
      "changelog": "https://mttr.si/skills/page-system/CHANGELOG.md",
      "install": {
        "claude-code": {
          "folder": ".claude/skills/mttr-page-system",
          "unix": "mkdir -p .claude/skills/mttr-page-system/references .claude/skills/mttr-page-system/scripts && curl -fsSL https://mttr.si/skills/page-system/SKILL.md -o .claude/skills/mttr-page-system/SKILL.md && curl -fsSL https://mttr.si/skills/page-system/references/page-kinds.md -o .claude/skills/mttr-page-system/references/page-kinds.md && curl -fsSL https://mttr.si/skills/page-system/references/structured-data.md -o .claude/skills/mttr-page-system/references/structured-data.md && curl -fsSL https://mttr.si/skills/page-system/references/components.md -o .claude/skills/mttr-page-system/references/components.md && curl -fsSL https://mttr.si/skills/page-system/references/outline-and-accessibility.md -o .claude/skills/mttr-page-system/references/outline-and-accessibility.md && curl -fsSL https://mttr.si/skills/page-system/references/links-and-hubs.md -o .claude/skills/mttr-page-system/references/links-and-hubs.md && curl -fsSL https://mttr.si/skills/page-system/references/images-and-speed.md -o .claude/skills/mttr-page-system/references/images-and-speed.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing.md -o .claude/skills/mttr-page-system/references/spacing.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing-traits.md -o .claude/skills/mttr-page-system/references/spacing-traits.md && curl -fsSL https://mttr.si/skills/page-system/scripts/measure.mjs -o .claude/skills/mttr-page-system/scripts/measure.mjs && curl -fsSL https://mttr.si/skills/page-system/references/migration.md -o .claude/skills/mttr-page-system/references/migration.md && curl -fsSL https://mttr.si/skills/page-system/references/troubleshooting.md -o .claude/skills/mttr-page-system/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .claude\\skills\\mttr-page-system\\references | Out-Null; New-Item -ItemType Directory -Force .claude\\skills\\mttr-page-system\\scripts | Out-Null; Invoke-WebRequest https://mttr.si/skills/page-system/SKILL.md -OutFile .claude\\skills\\mttr-page-system\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/page-kinds.md -OutFile .claude\\skills\\mttr-page-system\\references\\page-kinds.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/structured-data.md -OutFile .claude\\skills\\mttr-page-system\\references\\structured-data.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/components.md -OutFile .claude\\skills\\mttr-page-system\\references\\components.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/outline-and-accessibility.md -OutFile .claude\\skills\\mttr-page-system\\references\\outline-and-accessibility.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/links-and-hubs.md -OutFile .claude\\skills\\mttr-page-system\\references\\links-and-hubs.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/images-and-speed.md -OutFile .claude\\skills\\mttr-page-system\\references\\images-and-speed.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing.md -OutFile .claude\\skills\\mttr-page-system\\references\\spacing.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing-traits.md -OutFile .claude\\skills\\mttr-page-system\\references\\spacing-traits.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/scripts/measure.mjs -OutFile .claude\\skills\\mttr-page-system\\scripts\\measure.mjs -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/migration.md -OutFile .claude\\skills\\mttr-page-system\\references\\migration.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/troubleshooting.md -OutFile .claude\\skills\\mttr-page-system\\references\\troubleshooting.md -UseBasicParsing"
        },
        "codex": {
          "folder": ".agents/skills/mttr-page-system",
          "unix": "mkdir -p .agents/skills/mttr-page-system/references .agents/skills/mttr-page-system/scripts && curl -fsSL https://mttr.si/skills/page-system/SKILL.md -o .agents/skills/mttr-page-system/SKILL.md && curl -fsSL https://mttr.si/skills/page-system/references/page-kinds.md -o .agents/skills/mttr-page-system/references/page-kinds.md && curl -fsSL https://mttr.si/skills/page-system/references/structured-data.md -o .agents/skills/mttr-page-system/references/structured-data.md && curl -fsSL https://mttr.si/skills/page-system/references/components.md -o .agents/skills/mttr-page-system/references/components.md && curl -fsSL https://mttr.si/skills/page-system/references/outline-and-accessibility.md -o .agents/skills/mttr-page-system/references/outline-and-accessibility.md && curl -fsSL https://mttr.si/skills/page-system/references/links-and-hubs.md -o .agents/skills/mttr-page-system/references/links-and-hubs.md && curl -fsSL https://mttr.si/skills/page-system/references/images-and-speed.md -o .agents/skills/mttr-page-system/references/images-and-speed.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing.md -o .agents/skills/mttr-page-system/references/spacing.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing-traits.md -o .agents/skills/mttr-page-system/references/spacing-traits.md && curl -fsSL https://mttr.si/skills/page-system/scripts/measure.mjs -o .agents/skills/mttr-page-system/scripts/measure.mjs && curl -fsSL https://mttr.si/skills/page-system/references/migration.md -o .agents/skills/mttr-page-system/references/migration.md && curl -fsSL https://mttr.si/skills/page-system/references/troubleshooting.md -o .agents/skills/mttr-page-system/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .agents\\skills\\mttr-page-system\\references | Out-Null; New-Item -ItemType Directory -Force .agents\\skills\\mttr-page-system\\scripts | Out-Null; Invoke-WebRequest https://mttr.si/skills/page-system/SKILL.md -OutFile .agents\\skills\\mttr-page-system\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/page-kinds.md -OutFile .agents\\skills\\mttr-page-system\\references\\page-kinds.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/structured-data.md -OutFile .agents\\skills\\mttr-page-system\\references\\structured-data.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/components.md -OutFile .agents\\skills\\mttr-page-system\\references\\components.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/outline-and-accessibility.md -OutFile .agents\\skills\\mttr-page-system\\references\\outline-and-accessibility.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/links-and-hubs.md -OutFile .agents\\skills\\mttr-page-system\\references\\links-and-hubs.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/images-and-speed.md -OutFile .agents\\skills\\mttr-page-system\\references\\images-and-speed.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing.md -OutFile .agents\\skills\\mttr-page-system\\references\\spacing.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing-traits.md -OutFile .agents\\skills\\mttr-page-system\\references\\spacing-traits.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/scripts/measure.mjs -OutFile .agents\\skills\\mttr-page-system\\scripts\\measure.mjs -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/migration.md -OutFile .agents\\skills\\mttr-page-system\\references\\migration.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/troubleshooting.md -OutFile .agents\\skills\\mttr-page-system\\references\\troubleshooting.md -UseBasicParsing"
        },
        "cursor": {
          "folder": ".cursor/skills/mttr-page-system",
          "unix": "mkdir -p .cursor/skills/mttr-page-system/references .cursor/skills/mttr-page-system/scripts && curl -fsSL https://mttr.si/skills/page-system/SKILL.md -o .cursor/skills/mttr-page-system/SKILL.md && curl -fsSL https://mttr.si/skills/page-system/references/page-kinds.md -o .cursor/skills/mttr-page-system/references/page-kinds.md && curl -fsSL https://mttr.si/skills/page-system/references/structured-data.md -o .cursor/skills/mttr-page-system/references/structured-data.md && curl -fsSL https://mttr.si/skills/page-system/references/components.md -o .cursor/skills/mttr-page-system/references/components.md && curl -fsSL https://mttr.si/skills/page-system/references/outline-and-accessibility.md -o .cursor/skills/mttr-page-system/references/outline-and-accessibility.md && curl -fsSL https://mttr.si/skills/page-system/references/links-and-hubs.md -o .cursor/skills/mttr-page-system/references/links-and-hubs.md && curl -fsSL https://mttr.si/skills/page-system/references/images-and-speed.md -o .cursor/skills/mttr-page-system/references/images-and-speed.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing.md -o .cursor/skills/mttr-page-system/references/spacing.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing-traits.md -o .cursor/skills/mttr-page-system/references/spacing-traits.md && curl -fsSL https://mttr.si/skills/page-system/scripts/measure.mjs -o .cursor/skills/mttr-page-system/scripts/measure.mjs && curl -fsSL https://mttr.si/skills/page-system/references/migration.md -o .cursor/skills/mttr-page-system/references/migration.md && curl -fsSL https://mttr.si/skills/page-system/references/troubleshooting.md -o .cursor/skills/mttr-page-system/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .cursor\\skills\\mttr-page-system\\references | Out-Null; New-Item -ItemType Directory -Force .cursor\\skills\\mttr-page-system\\scripts | Out-Null; Invoke-WebRequest https://mttr.si/skills/page-system/SKILL.md -OutFile .cursor\\skills\\mttr-page-system\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/page-kinds.md -OutFile .cursor\\skills\\mttr-page-system\\references\\page-kinds.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/structured-data.md -OutFile .cursor\\skills\\mttr-page-system\\references\\structured-data.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/components.md -OutFile .cursor\\skills\\mttr-page-system\\references\\components.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/outline-and-accessibility.md -OutFile .cursor\\skills\\mttr-page-system\\references\\outline-and-accessibility.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/links-and-hubs.md -OutFile .cursor\\skills\\mttr-page-system\\references\\links-and-hubs.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/images-and-speed.md -OutFile .cursor\\skills\\mttr-page-system\\references\\images-and-speed.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing.md -OutFile .cursor\\skills\\mttr-page-system\\references\\spacing.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing-traits.md -OutFile .cursor\\skills\\mttr-page-system\\references\\spacing-traits.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/scripts/measure.mjs -OutFile .cursor\\skills\\mttr-page-system\\scripts\\measure.mjs -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/migration.md -OutFile .cursor\\skills\\mttr-page-system\\references\\migration.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/troubleshooting.md -OutFile .cursor\\skills\\mttr-page-system\\references\\troubleshooting.md -UseBasicParsing"
        },
        "other": {
          "folder": "docs/mttr-page-system",
          "unix": "mkdir -p docs/mttr-page-system/references docs/mttr-page-system/scripts && curl -fsSL https://mttr.si/skills/page-system/SKILL.md -o docs/mttr-page-system/SKILL.md && curl -fsSL https://mttr.si/skills/page-system/references/page-kinds.md -o docs/mttr-page-system/references/page-kinds.md && curl -fsSL https://mttr.si/skills/page-system/references/structured-data.md -o docs/mttr-page-system/references/structured-data.md && curl -fsSL https://mttr.si/skills/page-system/references/components.md -o docs/mttr-page-system/references/components.md && curl -fsSL https://mttr.si/skills/page-system/references/outline-and-accessibility.md -o docs/mttr-page-system/references/outline-and-accessibility.md && curl -fsSL https://mttr.si/skills/page-system/references/links-and-hubs.md -o docs/mttr-page-system/references/links-and-hubs.md && curl -fsSL https://mttr.si/skills/page-system/references/images-and-speed.md -o docs/mttr-page-system/references/images-and-speed.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing.md -o docs/mttr-page-system/references/spacing.md && curl -fsSL https://mttr.si/skills/page-system/references/spacing-traits.md -o docs/mttr-page-system/references/spacing-traits.md && curl -fsSL https://mttr.si/skills/page-system/scripts/measure.mjs -o docs/mttr-page-system/scripts/measure.mjs && curl -fsSL https://mttr.si/skills/page-system/references/migration.md -o docs/mttr-page-system/references/migration.md && curl -fsSL https://mttr.si/skills/page-system/references/troubleshooting.md -o docs/mttr-page-system/references/troubleshooting.md && echo \"For page templates and shared components, follow docs/mttr-page-system/SKILL.md.\" >> AGENTS.md",
          "windows": "New-Item -ItemType Directory -Force docs\\mttr-page-system\\references | Out-Null; New-Item -ItemType Directory -Force docs\\mttr-page-system\\scripts | Out-Null; Invoke-WebRequest https://mttr.si/skills/page-system/SKILL.md -OutFile docs\\mttr-page-system\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/page-kinds.md -OutFile docs\\mttr-page-system\\references\\page-kinds.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/structured-data.md -OutFile docs\\mttr-page-system\\references\\structured-data.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/components.md -OutFile docs\\mttr-page-system\\references\\components.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/outline-and-accessibility.md -OutFile docs\\mttr-page-system\\references\\outline-and-accessibility.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/links-and-hubs.md -OutFile docs\\mttr-page-system\\references\\links-and-hubs.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/images-and-speed.md -OutFile docs\\mttr-page-system\\references\\images-and-speed.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing.md -OutFile docs\\mttr-page-system\\references\\spacing.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/spacing-traits.md -OutFile docs\\mttr-page-system\\references\\spacing-traits.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/scripts/measure.mjs -OutFile docs\\mttr-page-system\\scripts\\measure.mjs -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/migration.md -OutFile docs\\mttr-page-system\\references\\migration.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/page-system/references/troubleshooting.md -OutFile docs\\mttr-page-system\\references\\troubleshooting.md -UseBasicParsing; Add-Content AGENTS.md \"For page templates and shared components, follow docs/mttr-page-system/SKILL.md.\""
        }
      }
    },
    {
      "name": "mttr-llms-txt",
      "title": "llms.txt",
      "version": "1.1.2",
      "updated": "2026-10-23",
      "description": "Adds a /llms.txt to a website, a plain text outline of the whole site for AI assistants, built from the site's own pages and facts so it cannot go stale, with tests that catch a missing page, and checks it with mttr. Use when asked to add, fix or update llms.txt, to outline a site for AI assistants or agents, or when mttr reports the llms-txt finding. Works for one site or a network of sites served from one app. Not a way to rank, as its effect on AI visibility is unproven.",
      "does": "Adds a /llms.txt to a site, a plain text outline for AI assistants built from the site’s own pages and facts, with tests that catch a missing page, and checks it with mttr.",
      "page": "https://mttr.si/skills/llms-txt",
      "files": [
        {
          "path": "SKILL.md",
          "url": "https://mttr.si/skills/llms-txt/SKILL.md",
          "lines": 179,
          "bytes": 15081,
          "covers": "The six steps from gathering the site’s facts to checking the live file, the file’s shape, its rules, two ways to serve it, the tests and the report."
        },
        {
          "path": "references/example.md",
          "url": "https://mttr.si/skills/llms-txt/references/example.md",
          "lines": 91,
          "bytes": 4703,
          "covers": "A whole file for a sample business, a route that builds it from the site’s own data, and the test that catches a new page."
        },
        {
          "path": "references/format.md",
          "url": "https://mttr.si/skills/llms-txt/references/format.md",
          "lines": 122,
          "bytes": 7948,
          "covers": "The proposal’s exact parts in order, the mistakes that break them, a broken file and its fix, what to leave out, large sites split by section, Markdown twins and llms-full.txt."
        },
        {
          "path": "references/stacks.md",
          "url": "https://mttr.si/skills/llms-txt/references/stacks.md",
          "lines": 174,
          "bytes": 10490,
          "covers": "Building and serving the file in Next.js, Astro, a static site generator, WordPress, a plain server, and a network of sites from one app, each from the data the pages use."
        },
        {
          "path": "references/verify.md",
          "url": "https://mttr.si/skills/llms-txt/references/verify.md",
          "lines": 123,
          "bytes": 9063,
          "covers": "The tests as code, the live checks with what a pass and a fail look like, keeping the file in sync, and a table of symptoms, causes and fixes."
        }
      ],
      "tools": [
        "mttr_rescan",
        "mttr_job",
        "mttr_changes"
      ],
      "sources": [
        {
          "title": "Optimizing your website for generative AI features on Google Search",
          "url": "https://developers.google.com/search/docs/fundamentals/ai-optimization-guide#mythbusting",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Google's word that its Search can ignore files like llms.txt, and that Google may still crawl and index such a file like any other"
        },
        {
          "title": "Latest documentation updates",
          "url": "https://developers.google.com/search/updates#clarifying-guidance-on-llms.txt-files",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Google's note that the file neither helps nor hurts a site in Search, and is fine to keep for others"
        },
        {
          "title": "Manage Your Sitemaps With Sitemap Index Files",
          "url": "https://developers.google.com/search/docs/crawling-indexing/sitemaps/large-sitemaps",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "How a sitemap index names other sitemaps, which the page test must follow"
        },
        {
          "title": "Robots Meta Tags Specifications",
          "url": "https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The `X-Robots-Tag` header that keeps a non-HTML file, such as a Markdown twin, out of the index"
        },
        {
          "title": "How to Specify a Canonical with rel=\"canonical\" and Other Methods",
          "url": "https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The `rel=\"canonical\"` HTTP header that points a Markdown twin at its HTML page"
        },
        {
          "title": "Route Handlers",
          "url": "https://github.com/vercel/next.js/blob/canary/docs/01-app/01-getting-started/15-route-handlers.mdx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "Next.js route handlers, that `GET` is not cached by default, and `force-static` to build it once"
        },
        {
          "title": "route.js",
          "url": "https://github.com/vercel/next.js/blob/canary/docs/01-app/03-api-reference/03-file-conventions/route.mdx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "The non-UI response pattern, a folder named for the file with a `route.ts` inside"
        },
        {
          "title": "Endpoints",
          "url": "https://docs.astro.build/en/guides/endpoints/",
          "by": "Astro Docs",
          "group": "Platforms",
          "uses": "Astro's static file endpoints, where `src/pages/llms.txt.ts` builds `/llms.txt`, called at build time on a static site and on request with a server"
        },
        {
          "title": "Content collections",
          "url": "https://docs.astro.build/en/guides/content-collections/",
          "by": "Astro Docs",
          "group": "Platforms",
          "uses": "`getCollection()`, the same data an Astro site's pages are built from"
        },
        {
          "title": "add_rewrite_rule()",
          "url": "https://developer.wordpress.org/reference/functions/add_rewrite_rule/",
          "by": "WordPress Developer Resources",
          "group": "Platforms",
          "uses": "How a WordPress plugin answers an address of its own, and that rules must be flushed after they change"
        },
        {
          "title": "flush_rewrite_rules()",
          "url": "https://developer.wordpress.org/reference/functions/flush_rewrite_rules/",
          "by": "WordPress Developer Resources",
          "group": "Platforms",
          "uses": "That flushing is expensive and belongs on activation, not on every request"
        },
        {
          "title": "WP_Sitemaps",
          "url": "https://developer.wordpress.org/reference/classes/wp_sitemaps/",
          "by": "WordPress Developer Resources",
          "group": "Platforms",
          "uses": "WordPress's own sitemap since 5.5, an index at `/wp-sitemap.xml`"
        },
        {
          "title": "llms.txt",
          "url": "https://www.mintlify.com/docs/ai/llmstxt",
          "by": "Mintlify docs",
          "group": "Platforms",
          "uses": "One documentation platform's llms-full.txt, every page in one file, which is a platform's convention and not part of the proposal"
        },
        {
          "title": "The /llms.txt file, v2",
          "url": "https://llmstxt.org",
          "by": "llmstxt.org",
          "group": "Standards and protocols",
          "uses": "The proposal the file's shape follows, its required H1, its file lists, subpath files, Markdown twins and link relations"
        },
        {
          "title": "llms.txt",
          "url": "https://developer.chrome.com/docs/lighthouse/agentic-browsing/llms-txt",
          "by": "Chrome for Developers",
          "group": "Standards and protocols",
          "uses": "Lighthouse's agentic browsing audit, which flags a server error on the file and treats a missing file as not applicable"
        },
        {
          "title": "Link header",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "The HTTP `Link` header, with the same meaning as an HTML `<link>`, for pointing a page at its Markdown twin and its llms.txt"
        }
      ],
      "changelog": "https://mttr.si/skills/llms-txt/CHANGELOG.md",
      "install": {
        "claude-code": {
          "folder": ".claude/skills/mttr-llms-txt",
          "unix": "mkdir -p .claude/skills/mttr-llms-txt/references && curl -fsSL https://mttr.si/skills/llms-txt/SKILL.md -o .claude/skills/mttr-llms-txt/SKILL.md && curl -fsSL https://mttr.si/skills/llms-txt/references/example.md -o .claude/skills/mttr-llms-txt/references/example.md && curl -fsSL https://mttr.si/skills/llms-txt/references/format.md -o .claude/skills/mttr-llms-txt/references/format.md && curl -fsSL https://mttr.si/skills/llms-txt/references/stacks.md -o .claude/skills/mttr-llms-txt/references/stacks.md && curl -fsSL https://mttr.si/skills/llms-txt/references/verify.md -o .claude/skills/mttr-llms-txt/references/verify.md",
          "windows": "New-Item -ItemType Directory -Force .claude\\skills\\mttr-llms-txt\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/llms-txt/SKILL.md -OutFile .claude\\skills\\mttr-llms-txt\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/example.md -OutFile .claude\\skills\\mttr-llms-txt\\references\\example.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/format.md -OutFile .claude\\skills\\mttr-llms-txt\\references\\format.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/stacks.md -OutFile .claude\\skills\\mttr-llms-txt\\references\\stacks.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/verify.md -OutFile .claude\\skills\\mttr-llms-txt\\references\\verify.md -UseBasicParsing"
        },
        "codex": {
          "folder": ".agents/skills/mttr-llms-txt",
          "unix": "mkdir -p .agents/skills/mttr-llms-txt/references && curl -fsSL https://mttr.si/skills/llms-txt/SKILL.md -o .agents/skills/mttr-llms-txt/SKILL.md && curl -fsSL https://mttr.si/skills/llms-txt/references/example.md -o .agents/skills/mttr-llms-txt/references/example.md && curl -fsSL https://mttr.si/skills/llms-txt/references/format.md -o .agents/skills/mttr-llms-txt/references/format.md && curl -fsSL https://mttr.si/skills/llms-txt/references/stacks.md -o .agents/skills/mttr-llms-txt/references/stacks.md && curl -fsSL https://mttr.si/skills/llms-txt/references/verify.md -o .agents/skills/mttr-llms-txt/references/verify.md",
          "windows": "New-Item -ItemType Directory -Force .agents\\skills\\mttr-llms-txt\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/llms-txt/SKILL.md -OutFile .agents\\skills\\mttr-llms-txt\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/example.md -OutFile .agents\\skills\\mttr-llms-txt\\references\\example.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/format.md -OutFile .agents\\skills\\mttr-llms-txt\\references\\format.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/stacks.md -OutFile .agents\\skills\\mttr-llms-txt\\references\\stacks.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/verify.md -OutFile .agents\\skills\\mttr-llms-txt\\references\\verify.md -UseBasicParsing"
        },
        "cursor": {
          "folder": ".cursor/skills/mttr-llms-txt",
          "unix": "mkdir -p .cursor/skills/mttr-llms-txt/references && curl -fsSL https://mttr.si/skills/llms-txt/SKILL.md -o .cursor/skills/mttr-llms-txt/SKILL.md && curl -fsSL https://mttr.si/skills/llms-txt/references/example.md -o .cursor/skills/mttr-llms-txt/references/example.md && curl -fsSL https://mttr.si/skills/llms-txt/references/format.md -o .cursor/skills/mttr-llms-txt/references/format.md && curl -fsSL https://mttr.si/skills/llms-txt/references/stacks.md -o .cursor/skills/mttr-llms-txt/references/stacks.md && curl -fsSL https://mttr.si/skills/llms-txt/references/verify.md -o .cursor/skills/mttr-llms-txt/references/verify.md",
          "windows": "New-Item -ItemType Directory -Force .cursor\\skills\\mttr-llms-txt\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/llms-txt/SKILL.md -OutFile .cursor\\skills\\mttr-llms-txt\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/example.md -OutFile .cursor\\skills\\mttr-llms-txt\\references\\example.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/format.md -OutFile .cursor\\skills\\mttr-llms-txt\\references\\format.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/stacks.md -OutFile .cursor\\skills\\mttr-llms-txt\\references\\stacks.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/verify.md -OutFile .cursor\\skills\\mttr-llms-txt\\references\\verify.md -UseBasicParsing"
        },
        "other": {
          "folder": "docs/mttr-llms-txt",
          "unix": "mkdir -p docs/mttr-llms-txt/references && curl -fsSL https://mttr.si/skills/llms-txt/SKILL.md -o docs/mttr-llms-txt/SKILL.md && curl -fsSL https://mttr.si/skills/llms-txt/references/example.md -o docs/mttr-llms-txt/references/example.md && curl -fsSL https://mttr.si/skills/llms-txt/references/format.md -o docs/mttr-llms-txt/references/format.md && curl -fsSL https://mttr.si/skills/llms-txt/references/stacks.md -o docs/mttr-llms-txt/references/stacks.md && curl -fsSL https://mttr.si/skills/llms-txt/references/verify.md -o docs/mttr-llms-txt/references/verify.md && echo \"For adding llms.txt, follow docs/mttr-llms-txt/SKILL.md.\" >> AGENTS.md",
          "windows": "New-Item -ItemType Directory -Force docs\\mttr-llms-txt\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/llms-txt/SKILL.md -OutFile docs\\mttr-llms-txt\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/example.md -OutFile docs\\mttr-llms-txt\\references\\example.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/format.md -OutFile docs\\mttr-llms-txt\\references\\format.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/stacks.md -OutFile docs\\mttr-llms-txt\\references\\stacks.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/llms-txt/references/verify.md -OutFile docs\\mttr-llms-txt\\references\\verify.md -UseBasicParsing; Add-Content AGENTS.md \"For adding llms.txt, follow docs/mttr-llms-txt/SKILL.md.\""
        }
      }
    },
    {
      "name": "mttr-shop-ready",
      "title": "Shop ready",
      "version": "1.2.0",
      "updated": "2026-10-18",
      "description": "Fixes the Product structured data (JSON-LD) in an online shop's own product page templates so it states what the page shows, in the fields Google lists for merchant listings, and checks each live page with mttr before and after. Use in a shop's repository (Shopify theme, Shopify Hydrogen, Next.js commerce, WooCommerce, BigCommerce, Magento or Adobe Commerce, or a headless storefront) when asked to fix product schema, product JSON-LD or merchant listing markup; price, currency, availability, shipping, returns, brand, GTIN or variants in structured data; or to get product pages ready for Google Shopping, merchant listings or Universal Cart. Not for the Merchant Center feed or account, which stay with the person.",
      "does": "Fixes the Product data in a shop's own product templates so it states what the page shows, and checks each live page with mttr before and after.",
      "page": "https://mttr.si/skills/shop-ready",
      "files": [
        {
          "path": "SKILL.md",
          "url": "https://mttr.si/skills/shop-ready/SKILL.md",
          "lines": 176,
          "bytes": 16200,
          "covers": "The seven steps from finding the platform to checking again, the four ways a change ships, the fields to fix in order, and the report."
        },
        {
          "path": "references/platforms.md",
          "url": "https://mttr.si/skills/shop-ready/references/platforms.md",
          "lines": 242,
          "bytes": 19441,
          "covers": "Where Shopify themes, Hydrogen, Next.js commerce, WooCommerce, BigCommerce and Magento write their product data, which field each value comes from, and a worked replacement for each."
        },
        {
          "path": "references/markup.md",
          "url": "https://mttr.si/skills/shop-ready/references/markup.md",
          "lines": 230,
          "bytes": 14210,
          "covers": "Before and after JSON-LD for a plain product, a product with variants, a sale price, and the shop’s shipping and returns, with the rules for each field and which source wins."
        },
        {
          "path": "references/merchant-center.md",
          "url": "https://mttr.si/skills/shop-ready/references/merchant-center.md",
          "lines": 56,
          "bytes": 5782,
          "covers": "The Merchant Center feed’s fields beside the page’s, why they must agree, prices and tax by country, and the feed apps on Shopify and WooCommerce."
        },
        {
          "path": "references/verify.md",
          "url": "https://mttr.si/skills/shop-ready/references/verify.md",
          "lines": 76,
          "bytes": 8053,
          "covers": "A command that prints the JSON-LD the server sends, what the check’s answer means, Google’s own tools, and a table of symptom, cause and fix."
        }
      ],
      "tools": [
        "mttr_signup",
        "mttr_proposals",
        "mttr_claim",
        "mttr_claim_check",
        "mttr_propose",
        "mttr_log_work",
        "mttr_product_check",
        "mttr_proposal",
        "mttr_rescan",
        "mttr_job",
        "mttr_changes"
      ],
      "sources": [
        {
          "title": "Rich Results Test",
          "url": "https://search.google.com/test/rich-results",
          "by": "Google Search Console",
          "group": "Google Search Central",
          "uses": "Google's own read of one page"
        },
        {
          "title": "Merchant listing (Product, Offer) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/merchant-listing",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The required and recommended Product and Offer fields, their values and rules, the Merchant listings report, and that no feature is guaranteed"
        },
        {
          "title": "Product variant structured data (ProductGroup, Product)",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/product-variants",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "ProductGroup, variesBy and its values, variant ids, and the single page and multi page approaches"
        },
        {
          "title": "Merchant return policy (MerchantReturnPolicy) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/return-policy",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The return policy on the Organization, its required fields and values, and which source wins"
        },
        {
          "title": "Merchant shipping policy (ShippingService) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/shipping-policy",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "The shipping service on the Organization, its conditions, and the lowest-cost rule"
        },
        {
          "title": "Review snippet (Review, AggregateRating) structured data",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/review-snippet",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Ratings visible on the page, no ratings from other sites, and where self-serving reviews apply"
        },
        {
          "title": "Intro to How Structured Data Markup Works",
          "url": "https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "JSON-LD as the format Google prefers, script-added JSON-LD, and URL Inspection"
        },
        {
          "title": "Promote Your Business with Merchant Center",
          "url": "https://merchants.google.com",
          "by": "Google Merchant Center",
          "group": "Google Merchant Center and UCP",
          "uses": "Where the feed, the shipping and return settings and the diagnostics stay with the person"
        },
        {
          "title": "Google Universal Commerce Protocol (UCP) Guide",
          "url": "https://developers.google.com/merchant/ucp/guides/overview",
          "by": "Google for Developers",
          "group": "Google Merchant Center and UCP",
          "uses": "The waitlist and steps for checkout on Google"
        },
        {
          "title": "Product data specification",
          "url": "https://support.google.com/merchants/answer/7052112",
          "by": "Google Merchant Center Help",
          "group": "Google Merchant Center and UCP",
          "uses": "Each feed attribute's format: price, sale price, availability, GTIN, MPN, brand, identifier_exists, item_group_id and condition"
        },
        {
          "title": "Price [price]",
          "url": "https://support.google.com/merchants/answer/6324371",
          "by": "Google Merchant Center Help",
          "group": "Google Merchant Center and UCP",
          "uses": "The price must match the landing page and checkout, and how tax is counted by country"
        },
        {
          "title": "Allow Merchant Center to update product information automatically",
          "url": "https://support.google.com/merchants/answer/3246284",
          "by": "Google Merchant Center Help",
          "group": "Google Merchant Center and UCP",
          "uses": "Automatic item updates read the page's structured data for price, availability and condition, and mismatches can disapprove"
        },
        {
          "title": "Schema Markup Validator",
          "url": "https://validator.schema.org",
          "by": "schema.org",
          "group": "schema.org",
          "uses": "Schema.org's check of the markup itself"
        },
        {
          "title": "Liquid filters: structured_data",
          "url": "https://shopify.dev/docs/api/liquid/filters/structured_data",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "What Shopify's filter writes for a product and a product with variants"
        },
        {
          "title": "Liquid objects: product",
          "url": "https://shopify.dev/docs/api/liquid/objects/product",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "The selected or first available variant, the default-variant test, the 250 variant cap and the product's options"
        },
        {
          "title": "Liquid objects: variant",
          "url": "https://shopify.dev/docs/api/liquid/objects/variant",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "Prices in the currency's subunit, availability, barcode, SKU and the selling policy when out of stock"
        },
        {
          "title": "getSeoMeta",
          "url": "https://shopify.dev/docs/api/hydrogen/latest/utilities/getseometa",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "The Hydrogen utility and the version that stops supporting it"
        },
        {
          "title": "ProductVariant",
          "url": "https://shopify.dev/docs/api/storefront/latest/objects/ProductVariant",
          "by": "Shopify developer docs",
          "group": "Platforms",
          "uses": "The Storefront API's variant fields, SKU, barcode, availability and the backorder flag"
        },
        {
          "title": "Hydrogen",
          "url": "https://github.com/Shopify/hydrogen",
          "by": "Shopify, on GitHub",
          "group": "Platforms",
          "uses": "The example product routes in Shopify's own repository"
        },
        {
          "title": "commerce/app/product/[handle]/page.tsx",
          "url": "https://github.com/vercel/commerce/blob/main/app/product/%5Bhandle%5D/page.tsx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "The product page in Vercel's Next.js Commerce template"
        },
        {
          "title": "commerce/lib/shopify/types.ts",
          "url": "https://github.com/vercel/commerce/blob/main/lib/shopify/types.ts",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "The template's product and variant types, which carry no SKU or barcode"
        },
        {
          "title": "WooCommerce Monorepo",
          "url": "https://github.com/woocommerce/woocommerce",
          "by": "WooCommerce, on GitHub",
          "group": "Platforms",
          "uses": "The source of WooCommerce's structured data class and its filters"
        },
        {
          "title": "cornerstone/templates/components/products/schema.html",
          "url": "https://github.com/bigcommerce/cornerstone/blob/master/templates/components/products/schema.html",
          "by": "BigCommerce, on GitHub",
          "group": "Platforms",
          "uses": "The Product JSON-LD in BigCommerce's reference theme"
        },
        {
          "title": "magento2/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml",
          "url": "https://github.com/magento/magento2/blob/2.4-develop/app/code/Magento/Catalog/view/frontend/layout/catalog_product_view.xml",
          "by": "Magento Open Source, on GitHub",
          "group": "Platforms",
          "uses": "The microdata Magento's product page layout adds"
        },
        {
          "title": "Google & YouTube",
          "url": "https://help.shopify.com/en/manual/online-sales-channels/google",
          "by": "Shopify Help Center",
          "group": "Platforms",
          "uses": "Shopify's sales channel that syncs products to Merchant Center"
        },
        {
          "title": "Google for WooCommerce for WooCommerce",
          "url": "https://woocommerce.com/products/google-listings-and-ads/",
          "by": "WooCommerce",
          "group": "Platforms",
          "uses": "The WooCommerce extension that syncs the feed, and its note on shipping"
        }
      ],
      "changelog": "https://mttr.si/skills/shop-ready/CHANGELOG.md",
      "install": {
        "claude-code": {
          "folder": ".claude/skills/mttr-shop-ready",
          "unix": "mkdir -p .claude/skills/mttr-shop-ready/references && curl -fsSL https://mttr.si/skills/shop-ready/SKILL.md -o .claude/skills/mttr-shop-ready/SKILL.md && curl -fsSL https://mttr.si/skills/shop-ready/references/platforms.md -o .claude/skills/mttr-shop-ready/references/platforms.md && curl -fsSL https://mttr.si/skills/shop-ready/references/markup.md -o .claude/skills/mttr-shop-ready/references/markup.md && curl -fsSL https://mttr.si/skills/shop-ready/references/merchant-center.md -o .claude/skills/mttr-shop-ready/references/merchant-center.md && curl -fsSL https://mttr.si/skills/shop-ready/references/verify.md -o .claude/skills/mttr-shop-ready/references/verify.md",
          "windows": "New-Item -ItemType Directory -Force .claude\\skills\\mttr-shop-ready\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/shop-ready/SKILL.md -OutFile .claude\\skills\\mttr-shop-ready\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/platforms.md -OutFile .claude\\skills\\mttr-shop-ready\\references\\platforms.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/markup.md -OutFile .claude\\skills\\mttr-shop-ready\\references\\markup.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/merchant-center.md -OutFile .claude\\skills\\mttr-shop-ready\\references\\merchant-center.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/verify.md -OutFile .claude\\skills\\mttr-shop-ready\\references\\verify.md -UseBasicParsing"
        },
        "codex": {
          "folder": ".agents/skills/mttr-shop-ready",
          "unix": "mkdir -p .agents/skills/mttr-shop-ready/references && curl -fsSL https://mttr.si/skills/shop-ready/SKILL.md -o .agents/skills/mttr-shop-ready/SKILL.md && curl -fsSL https://mttr.si/skills/shop-ready/references/platforms.md -o .agents/skills/mttr-shop-ready/references/platforms.md && curl -fsSL https://mttr.si/skills/shop-ready/references/markup.md -o .agents/skills/mttr-shop-ready/references/markup.md && curl -fsSL https://mttr.si/skills/shop-ready/references/merchant-center.md -o .agents/skills/mttr-shop-ready/references/merchant-center.md && curl -fsSL https://mttr.si/skills/shop-ready/references/verify.md -o .agents/skills/mttr-shop-ready/references/verify.md",
          "windows": "New-Item -ItemType Directory -Force .agents\\skills\\mttr-shop-ready\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/shop-ready/SKILL.md -OutFile .agents\\skills\\mttr-shop-ready\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/platforms.md -OutFile .agents\\skills\\mttr-shop-ready\\references\\platforms.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/markup.md -OutFile .agents\\skills\\mttr-shop-ready\\references\\markup.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/merchant-center.md -OutFile .agents\\skills\\mttr-shop-ready\\references\\merchant-center.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/verify.md -OutFile .agents\\skills\\mttr-shop-ready\\references\\verify.md -UseBasicParsing"
        },
        "cursor": {
          "folder": ".cursor/skills/mttr-shop-ready",
          "unix": "mkdir -p .cursor/skills/mttr-shop-ready/references && curl -fsSL https://mttr.si/skills/shop-ready/SKILL.md -o .cursor/skills/mttr-shop-ready/SKILL.md && curl -fsSL https://mttr.si/skills/shop-ready/references/platforms.md -o .cursor/skills/mttr-shop-ready/references/platforms.md && curl -fsSL https://mttr.si/skills/shop-ready/references/markup.md -o .cursor/skills/mttr-shop-ready/references/markup.md && curl -fsSL https://mttr.si/skills/shop-ready/references/merchant-center.md -o .cursor/skills/mttr-shop-ready/references/merchant-center.md && curl -fsSL https://mttr.si/skills/shop-ready/references/verify.md -o .cursor/skills/mttr-shop-ready/references/verify.md",
          "windows": "New-Item -ItemType Directory -Force .cursor\\skills\\mttr-shop-ready\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/shop-ready/SKILL.md -OutFile .cursor\\skills\\mttr-shop-ready\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/platforms.md -OutFile .cursor\\skills\\mttr-shop-ready\\references\\platforms.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/markup.md -OutFile .cursor\\skills\\mttr-shop-ready\\references\\markup.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/merchant-center.md -OutFile .cursor\\skills\\mttr-shop-ready\\references\\merchant-center.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/verify.md -OutFile .cursor\\skills\\mttr-shop-ready\\references\\verify.md -UseBasicParsing"
        },
        "other": {
          "folder": "docs/mttr-shop-ready",
          "unix": "mkdir -p docs/mttr-shop-ready/references && curl -fsSL https://mttr.si/skills/shop-ready/SKILL.md -o docs/mttr-shop-ready/SKILL.md && curl -fsSL https://mttr.si/skills/shop-ready/references/platforms.md -o docs/mttr-shop-ready/references/platforms.md && curl -fsSL https://mttr.si/skills/shop-ready/references/markup.md -o docs/mttr-shop-ready/references/markup.md && curl -fsSL https://mttr.si/skills/shop-ready/references/merchant-center.md -o docs/mttr-shop-ready/references/merchant-center.md && curl -fsSL https://mttr.si/skills/shop-ready/references/verify.md -o docs/mttr-shop-ready/references/verify.md && echo \"For product page structured data, follow docs/mttr-shop-ready/SKILL.md.\" >> AGENTS.md",
          "windows": "New-Item -ItemType Directory -Force docs\\mttr-shop-ready\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/shop-ready/SKILL.md -OutFile docs\\mttr-shop-ready\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/platforms.md -OutFile docs\\mttr-shop-ready\\references\\platforms.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/markup.md -OutFile docs\\mttr-shop-ready\\references\\markup.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/merchant-center.md -OutFile docs\\mttr-shop-ready\\references\\merchant-center.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/shop-ready/references/verify.md -OutFile docs\\mttr-shop-ready\\references\\verify.md -UseBasicParsing; Add-Content AGENTS.md \"For product page structured data, follow docs/mttr-shop-ready/SKILL.md.\""
        }
      }
    },
    {
      "name": "mttr-livecards",
      "title": "Livecards",
      "version": "1.2.0",
      "updated": "2026-10-19",
      "description": "Makes a page of a site run inside a post on X. X frames the page in the post when its link declares a player card, so a demo, a tool, a game or a short landing page is usable without leaving the timeline. Covers the card tags, letting X and only X frame one route, what X's crawler is really served, the embed mode a framed page needs (scrolling, links, overlays) and X's card cache, and checks the live route with mttr. Use when asked to make a page, demo or app work inside a tweet or post, for a twitter:card player or twitter:player, or when a player card shows as a plain image, a blank frame, or a frame that will not scroll. Not for a normal link preview, embedding a post on a site, or posting video.",
      "does": "Makes one page of a site a livecard, a page that runs inside a post on X: the player card tags, framing for X on that route only, what X’s crawler is really served, and an embed mode for scrolling, links and overlays, checked live with mttr.",
      "page": "https://mttr.si/skills/livecards",
      "files": [
        {
          "path": "SKILL.md",
          "url": "https://mttr.si/skills/livecards/SKILL.md",
          "lines": 176,
          "bytes": 15001,
          "covers": "The seven steps from picking the route to testing it in a post, the card tags, the framing headers, the crawler check, the embed mode, the card cache and the report."
        },
        {
          "path": "references/card-tags.md",
          "url": "https://mttr.si/skills/livecards/references/card-tags.md",
          "lines": 134,
          "bytes": 8659,
          "covers": "Every card tag with X’s limits, the picture at the frame’s size and its 68,600 pixel floor, where a second twitter:card comes from, and the tags in plain HTML and in Next.js."
        },
        {
          "path": "references/framing-headers.md",
          "url": "https://mttr.si/skills/livecards/references/framing-headers.md",
          "lines": 159,
          "bytes": 11179,
          "covers": "Why the framing rule reads as it does, what breaks it, and the config for Next.js, Express with Helmet, Nginx, Cloudflare Pages, Vercel and Netlify, each with its trap."
        },
        {
          "path": "references/embed-mode.md",
          "url": "https://mttr.si/skills/livecards/references/embed-mode.md",
          "lines": 131,
          "bytes": 6973,
          "covers": "Where the page runs in each X client, turning the mode on by route, and scrolling, links, sign-in and cookies, overlays, media, https and weight, with a whole route as an example."
        },
        {
          "path": "references/troubleshooting.md",
          "url": "https://mttr.si/skills/livecards/references/troubleshooting.md",
          "lines": 65,
          "bytes": 6456,
          "covers": "X’s crawler and its address ranges, four commands that find a cause, each symptom with its fix, the card cache and the validator."
        }
      ],
      "tools": [
        "mttr_x_card"
      ],
      "sources": [
        {
          "title": "How Google interprets the robots.txt specification",
          "url": "https://developers.google.com/search/docs/crawling-indexing/robots/robots_txt",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "One group followed, the most specific that matches, which Twitterbot follows too"
        },
        {
          "title": "Cards markup",
          "url": "https://web.archive.org/web/20260201012312/https://developer.x.com/en/docs/x-for-websites/cards/overview/markup",
          "by": "X developer docs, archived",
          "group": "Platforms",
          "uses": "Every card tag, the title, description and alt lengths, the image formats and size, and the Open Graph fallback for each tag"
        },
        {
          "title": "Player Card",
          "url": "https://web.archive.org/web/20260201012312/https://developer.x.com/en/docs/x-for-websites/cards/overview/player-card",
          "by": "X developer docs, archived",
          "group": "Platforms",
          "uses": "The 68,600 pixel floor, how each client shows the card, and the validator's still picture"
        },
        {
          "title": "Troubleshooting Cards",
          "url": "https://web.archive.org/web/20260201012312/https://developer.x.com/en/docs/x-for-websites/cards/guides/troubleshooting-cards",
          "by": "X developer docs, archived",
          "group": "Platforms",
          "uses": "Twitterbot's user agent, its address ranges and AS, the two-way lookup, TLS, the size limits, `robots.txt`, a player address that must be a simple page, and the cache"
        },
        {
          "title": "next.js/packages/next/src/lib/metadata/metadata-elements.tsx",
          "url": "https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/metadata-elements.tsx",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "Next.js writes `twitter:player:stream` for each listed player"
        },
        {
          "title": "next.js/packages/next/src/lib/metadata/metadata-resolution-primitives.ts",
          "url": "https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/metadata-resolution-primitives.ts",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "Next.js fills the X tags from Open Graph when the page sets none"
        },
        {
          "title": "next.js/packages/next/src/shared/lib/router/utils/html-bots.ts",
          "url": "https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/router/utils/html-bots.ts",
          "by": "Vercel, on GitHub",
          "group": "Platforms",
          "uses": "The bots, Twitterbot among them, that get metadata in the head rather than streamed"
        },
        {
          "title": "Static Configuration with vercel.json",
          "url": "https://vercel.com/docs/project-configuration/vercel-json",
          "by": "Vercel docs",
          "group": "Platforms",
          "uses": "The `headers` property, its `source` and its key and value pairs"
        },
        {
          "title": "Custom headers",
          "url": "https://docs.netlify.com/manage/routing/headers/",
          "by": "Netlify Docs",
          "group": "Platforms",
          "uses": "`_headers` and `netlify.toml`, and that they skip Functions, Edge Functions and proxied responses"
        },
        {
          "title": "Headers",
          "url": "https://developers.cloudflare.com/pages/configuration/headers/",
          "by": "Cloudflare Docs",
          "group": "Platforms",
          "uses": "Cloudflare Pages `_headers`, rules that combine, the comma join, detaching with `!`, and Pages Functions left out"
        },
        {
          "title": "headers",
          "url": "https://nextjs.org/docs/app/api-reference/config/next-config-js/headers",
          "by": "Next.js docs",
          "group": "Platforms",
          "uses": "`headers()` in `next.config.js`, the last match winning, and `X-Frame-Options` superseded by `frame-ancestors`"
        },
        {
          "title": "Response",
          "url": "https://expressjs.com/en/5x/api/response/",
          "by": "Express",
          "group": "Platforms",
          "uses": "`res.set`, which sets a header on the response"
        },
        {
          "title": "Helmet.js",
          "url": "https://helmet.js.org/",
          "by": "Helmet",
          "group": "Platforms",
          "uses": "Helmet's default `X-Frame-Options: SAMEORIGIN` and `frame-ancestors 'self'`, and how to change a directive"
        },
        {
          "title": "HTTP",
          "url": "https://nodejs.org/api/http.html",
          "by": "Node.js docs",
          "group": "Platforms",
          "uses": "`response.removeHeader`, which drops a header before it is sent"
        },
        {
          "title": "Module ngx_http_headers_module",
          "url": "https://nginx.org/en/docs/http/ngx_http_headers_module.html",
          "by": "nginx",
          "group": "Platforms",
          "uses": "`add_header`, `always`, and inheritance only when a level sets none"
        },
        {
          "title": "Module ngx_http_proxy_module",
          "url": "https://nginx.org/en/docs/http/ngx_http_proxy_module.html",
          "by": "nginx",
          "group": "Platforms",
          "uses": "`proxy_hide_header`, which keeps a proxied header from the client"
        },
        {
          "title": "Content-Security-Policy: frame-ancestors directive",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/frame-ancestors",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "The sources it takes, every ancestor checked, no fallback to `default-src`, and no support in `<meta>`"
        },
        {
          "title": "X-Frame-Options header",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "`DENY`, `SAMEORIGIN`, the obsolete `ALLOW-FROM`, and no effect in `<meta>`"
        },
        {
          "title": "Content Security Policy Level 3",
          "url": "https://www.w3.org/TR/CSP3/",
          "by": "W3C",
          "group": "Standards and protocols",
          "uses": "A `*.` host matches subdomains, and an enforced `frame-ancestors` makes a browser ignore `X-Frame-Options`"
        },
        {
          "title": "Content-Security-Policy (CSP) header",
          "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "More than one policy can only restrict further"
        },
        {
          "title": "Third-party cookies",
          "url": "https://developer.mozilla.org/en-US/docs/Web/Privacy/Guides/Third-party_cookies",
          "by": "MDN Web Docs",
          "group": "Standards and protocols",
          "uses": "What makes a cookie third-party, and how Firefox, Safari and Chrome treat them by default"
        }
      ],
      "changelog": "https://mttr.si/skills/livecards/CHANGELOG.md",
      "install": {
        "claude-code": {
          "folder": ".claude/skills/mttr-livecards",
          "unix": "mkdir -p .claude/skills/mttr-livecards/references && curl -fsSL https://mttr.si/skills/livecards/SKILL.md -o .claude/skills/mttr-livecards/SKILL.md && curl -fsSL https://mttr.si/skills/livecards/references/card-tags.md -o .claude/skills/mttr-livecards/references/card-tags.md && curl -fsSL https://mttr.si/skills/livecards/references/framing-headers.md -o .claude/skills/mttr-livecards/references/framing-headers.md && curl -fsSL https://mttr.si/skills/livecards/references/embed-mode.md -o .claude/skills/mttr-livecards/references/embed-mode.md && curl -fsSL https://mttr.si/skills/livecards/references/troubleshooting.md -o .claude/skills/mttr-livecards/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .claude\\skills\\mttr-livecards\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/livecards/SKILL.md -OutFile .claude\\skills\\mttr-livecards\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/card-tags.md -OutFile .claude\\skills\\mttr-livecards\\references\\card-tags.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/framing-headers.md -OutFile .claude\\skills\\mttr-livecards\\references\\framing-headers.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/embed-mode.md -OutFile .claude\\skills\\mttr-livecards\\references\\embed-mode.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/troubleshooting.md -OutFile .claude\\skills\\mttr-livecards\\references\\troubleshooting.md -UseBasicParsing"
        },
        "codex": {
          "folder": ".agents/skills/mttr-livecards",
          "unix": "mkdir -p .agents/skills/mttr-livecards/references && curl -fsSL https://mttr.si/skills/livecards/SKILL.md -o .agents/skills/mttr-livecards/SKILL.md && curl -fsSL https://mttr.si/skills/livecards/references/card-tags.md -o .agents/skills/mttr-livecards/references/card-tags.md && curl -fsSL https://mttr.si/skills/livecards/references/framing-headers.md -o .agents/skills/mttr-livecards/references/framing-headers.md && curl -fsSL https://mttr.si/skills/livecards/references/embed-mode.md -o .agents/skills/mttr-livecards/references/embed-mode.md && curl -fsSL https://mttr.si/skills/livecards/references/troubleshooting.md -o .agents/skills/mttr-livecards/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .agents\\skills\\mttr-livecards\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/livecards/SKILL.md -OutFile .agents\\skills\\mttr-livecards\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/card-tags.md -OutFile .agents\\skills\\mttr-livecards\\references\\card-tags.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/framing-headers.md -OutFile .agents\\skills\\mttr-livecards\\references\\framing-headers.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/embed-mode.md -OutFile .agents\\skills\\mttr-livecards\\references\\embed-mode.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/troubleshooting.md -OutFile .agents\\skills\\mttr-livecards\\references\\troubleshooting.md -UseBasicParsing"
        },
        "cursor": {
          "folder": ".cursor/skills/mttr-livecards",
          "unix": "mkdir -p .cursor/skills/mttr-livecards/references && curl -fsSL https://mttr.si/skills/livecards/SKILL.md -o .cursor/skills/mttr-livecards/SKILL.md && curl -fsSL https://mttr.si/skills/livecards/references/card-tags.md -o .cursor/skills/mttr-livecards/references/card-tags.md && curl -fsSL https://mttr.si/skills/livecards/references/framing-headers.md -o .cursor/skills/mttr-livecards/references/framing-headers.md && curl -fsSL https://mttr.si/skills/livecards/references/embed-mode.md -o .cursor/skills/mttr-livecards/references/embed-mode.md && curl -fsSL https://mttr.si/skills/livecards/references/troubleshooting.md -o .cursor/skills/mttr-livecards/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .cursor\\skills\\mttr-livecards\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/livecards/SKILL.md -OutFile .cursor\\skills\\mttr-livecards\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/card-tags.md -OutFile .cursor\\skills\\mttr-livecards\\references\\card-tags.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/framing-headers.md -OutFile .cursor\\skills\\mttr-livecards\\references\\framing-headers.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/embed-mode.md -OutFile .cursor\\skills\\mttr-livecards\\references\\embed-mode.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/troubleshooting.md -OutFile .cursor\\skills\\mttr-livecards\\references\\troubleshooting.md -UseBasicParsing"
        },
        "other": {
          "folder": "docs/mttr-livecards",
          "unix": "mkdir -p docs/mttr-livecards/references && curl -fsSL https://mttr.si/skills/livecards/SKILL.md -o docs/mttr-livecards/SKILL.md && curl -fsSL https://mttr.si/skills/livecards/references/card-tags.md -o docs/mttr-livecards/references/card-tags.md && curl -fsSL https://mttr.si/skills/livecards/references/framing-headers.md -o docs/mttr-livecards/references/framing-headers.md && curl -fsSL https://mttr.si/skills/livecards/references/embed-mode.md -o docs/mttr-livecards/references/embed-mode.md && curl -fsSL https://mttr.si/skills/livecards/references/troubleshooting.md -o docs/mttr-livecards/references/troubleshooting.md && echo \"For running a page inside a post on X, follow docs/mttr-livecards/SKILL.md.\" >> AGENTS.md",
          "windows": "New-Item -ItemType Directory -Force docs\\mttr-livecards\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/livecards/SKILL.md -OutFile docs\\mttr-livecards\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/card-tags.md -OutFile docs\\mttr-livecards\\references\\card-tags.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/framing-headers.md -OutFile docs\\mttr-livecards\\references\\framing-headers.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/embed-mode.md -OutFile docs\\mttr-livecards\\references\\embed-mode.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/livecards/references/troubleshooting.md -OutFile docs\\mttr-livecards\\references\\troubleshooting.md -UseBasicParsing; Add-Content AGENTS.md \"For running a page inside a post on X, follow docs/mttr-livecards/SKILL.md.\""
        }
      }
    },
    {
      "name": "mttr-rank-a-page",
      "title": "Rank a page",
      "version": "1.2.1",
      "updated": "2026-10-23",
      "description": "Runs a campaign to move one page of a site up for one search, toward an aim set at the start (such as top 3), through five gates in order (clean up, one intent, substance, links inside, links from outside), each opened only by a proof from a read of the live site, and keeps a log, a weekly read-out and the campaign's time to rank. Use when asked to rank a page, get a page to page one, move up for a keyword, or run an SEO campaign on one page; or when a page ranks on page two for a search that matters. Works with mttr connected, which reads the site and checks each gate, or alone with a campaign.md kept in the repository. Not for buying links or promising a place.",
      "does": "Runs a campaign to move one page up for one search toward an aim, through five gates in order, each opened only by a proof from a read of the live site, with a weekly read-out and the campaign’s time to rank.",
      "page": "https://mttr.si/skills/rank-a-page",
      "files": [
        {
          "path": "SKILL.md",
          "url": "https://mttr.si/skills/rank-a-page/SKILL.md",
          "lines": 167,
          "bytes": 19374,
          "covers": "The words it uses, setting up a campaign and its aim, the five gates with what to look at, how to decide, what to change and what opens each, reaching the aim, the rules it keeps, and a worked example."
        },
        {
          "path": "references/tracking.md",
          "url": "https://mttr.si/skills/rank-a-page/references/tracking.md",
          "lines": 106,
          "bytes": 5912,
          "covers": "The campaign log, with mttr’s work log or as campaign.md without it, what a gate’s states and a campaign’s status mean, and keeping a person’s mttr, with a worked log eight weeks in."
        },
        {
          "path": "references/report.md",
          "url": "https://mttr.si/skills/rank-a-page/references/report.md",
          "lines": 93,
          "bytes": 4898,
          "covers": "The weekly read-out: the place against the aim and the start, the status, what was done and proved, what is next, what needs the person, and the days so far, with worked weeks: a slip, the aim reached, a stall and the end."
        },
        {
          "path": "references/choosing-the-search.md",
          "url": "https://mttr.si/skills/rank-a-page/references/choosing-the-search.md",
          "lines": 63,
          "bytes": 6218,
          "covers": "Where candidate searches come from, reading the intent from the live results, checking another page of the site is not the better one, and setting an aim the evidence supports."
        },
        {
          "path": "references/the-page.md",
          "url": "https://mttr.si/skills/rank-a-page/references/the-page.md",
          "lines": 93,
          "bytes": 8044,
          "covers": "The brief to write first, a worked before and after of the title, first heading and opening, answers under the reader’s questions, the rules that bear on them, and the traps that trip agents."
        },
        {
          "path": "references/links-inside.md",
          "url": "https://mttr.si/skills/rank-a-page/references/links-inside.md",
          "lines": 54,
          "bytes": 5132,
          "covers": "Finding the site’s pages that should link here, a worked link in a sentence, the traps, and checking the links in the HTML the server sends."
        },
        {
          "path": "references/search-console.md",
          "url": "https://mttr.si/skills/rank-a-page/references/search-console.md",
          "lines": 64,
          "bytes": 7446,
          "covers": "Reading the Performance report for one page and one search, with mttr or by hand, what average position means, honest weekly figures with their impressions, URL Inspection, and troubleshooting the figures."
        },
        {
          "path": "references/timelines-and-stopping.md",
          "url": "https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md",
          "lines": 53,
          "bytes": 5210,
          "covers": "What Google says about timing, what to tell the person, the campaign’s own pacing, and when to raise ending or changing target, which is always a new campaign."
        },
        {
          "path": "references/troubleshooting.md",
          "url": "https://mttr.si/skills/rank-a-page/references/troubleshooting.md",
          "lines": 34,
          "bytes": 4135,
          "covers": "Symptoms in gates and reads, the place, and the work, each with its likely cause and the fix."
        }
      ],
      "tools": [
        "mttr_signup",
        "mttr_queries",
        "mttr_page",
        "mttr_links",
        "mttr_competitors",
        "mttr_gaps",
        "mttr_examples",
        "mttr_backlinks",
        "mttr_log_work",
        "mttr_rescan",
        "mttr_changes",
        "mttr_similar",
        "mttr_compare",
        "mttr_rules",
        "mttr_structure",
        "mttr_pages",
        "mttr_traffic",
        "mttr_job"
      ],
      "sources": [
        {
          "title": "Influencing your title links in search results",
          "url": "https://developers.google.com/search/docs/appearance/title-link",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "How the title at gate two is shown"
        },
        {
          "title": "Creating helpful, reliable, people-first content",
          "url": "https://developers.google.com/search/docs/fundamentals/creating-helpful-content",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "What substance means at gate three"
        },
        {
          "title": "Link best practices for Google",
          "url": "https://developers.google.com/search/docs/crawling-indexing/links-crawlable",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Link text at gate four"
        },
        {
          "title": "Spam policies for Google web search",
          "url": "https://developers.google.com/search/docs/essentials/spam-policies",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Why links are earned, never bought or swapped, at gate five"
        },
        {
          "title": "How to specify a canonical URL with rel=\"canonical\" and other methods",
          "url": "https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "One address for the page at gate one"
        },
        {
          "title": "Performance report (Search results): Overview and basic setup",
          "url": "https://support.google.com/webmasters/answer/7576553",
          "by": "Search Console Help",
          "group": "Google Search Central",
          "uses": "Where the page's place, and so its time to rank, comes from without mttr; results differ by person, newest data is preliminary, and the chart and table count differently"
        },
        {
          "title": "Performance report (Search results): Advanced filtering and comparison",
          "url": "https://support.google.com/webmasters/answer/17011165",
          "by": "Search Console Help",
          "group": "Google Search Central",
          "uses": "Filtering to one page and comparing two windows, and why filtered totals leave out anonymized queries"
        },
        {
          "title": "What are impressions, position, and clicks?",
          "url": "https://support.google.com/webmasters/answer/7042828",
          "by": "Search Console Help",
          "group": "Google Search Central",
          "uses": "Position as the topmost place held, averaged, and recorded only when the page was shown"
        },
        {
          "title": "URL Inspection tool",
          "url": "https://support.google.com/webmasters/answer/9012289",
          "by": "Search Console Help",
          "group": "Google Search Central",
          "uses": "Whether the page is on Google, and the declared canonical against the one Google selected, at gate one"
        },
        {
          "title": "Ask Google to recrawl your URLs",
          "url": "https://developers.google.com/search/docs/crawling-indexing/ask-google-to-recrawl",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "Asking for a crawl after a change, and that it takes days to weeks"
        },
        {
          "title": "SEO Starter Guide: The Basics",
          "url": "https://developers.google.com/search/docs/fundamentals/seo-starter-guide",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "That changes take hours to months to show, to wait a few weeks before judging, and that there is no preferred word count"
        },
        {
          "title": "Debugging drops in Google Search traffic",
          "url": "https://developers.google.com/search/docs/monitor-debug/debugging-search-traffic-drops",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "That small moves in position happen at any time, and that no change is sure to have an effect"
        },
        {
          "title": "Do you need an SEO?",
          "url": "https://developers.google.com/search/docs/fundamentals/do-i-need-seo",
          "by": "Google Search Central",
          "group": "Google Search Central",
          "uses": "That no one can guarantee a first place, so the campaign never promises one"
        }
      ],
      "changelog": "https://mttr.si/skills/rank-a-page/CHANGELOG.md",
      "install": {
        "claude-code": {
          "folder": ".claude/skills/mttr-rank-a-page",
          "unix": "mkdir -p .claude/skills/mttr-rank-a-page/references && curl -fsSL https://mttr.si/skills/rank-a-page/SKILL.md -o .claude/skills/mttr-rank-a-page/SKILL.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/tracking.md -o .claude/skills/mttr-rank-a-page/references/tracking.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/report.md -o .claude/skills/mttr-rank-a-page/references/report.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -o .claude/skills/mttr-rank-a-page/references/choosing-the-search.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/the-page.md -o .claude/skills/mttr-rank-a-page/references/the-page.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/links-inside.md -o .claude/skills/mttr-rank-a-page/references/links-inside.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/search-console.md -o .claude/skills/mttr-rank-a-page/references/search-console.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -o .claude/skills/mttr-rank-a-page/references/timelines-and-stopping.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/troubleshooting.md -o .claude/skills/mttr-rank-a-page/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .claude\\skills\\mttr-rank-a-page\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/rank-a-page/SKILL.md -OutFile .claude\\skills\\mttr-rank-a-page\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/tracking.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\tracking.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/report.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\report.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\choosing-the-search.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/the-page.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\the-page.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/links-inside.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\links-inside.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/search-console.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\search-console.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\timelines-and-stopping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/troubleshooting.md -OutFile .claude\\skills\\mttr-rank-a-page\\references\\troubleshooting.md -UseBasicParsing"
        },
        "codex": {
          "folder": ".agents/skills/mttr-rank-a-page",
          "unix": "mkdir -p .agents/skills/mttr-rank-a-page/references && curl -fsSL https://mttr.si/skills/rank-a-page/SKILL.md -o .agents/skills/mttr-rank-a-page/SKILL.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/tracking.md -o .agents/skills/mttr-rank-a-page/references/tracking.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/report.md -o .agents/skills/mttr-rank-a-page/references/report.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -o .agents/skills/mttr-rank-a-page/references/choosing-the-search.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/the-page.md -o .agents/skills/mttr-rank-a-page/references/the-page.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/links-inside.md -o .agents/skills/mttr-rank-a-page/references/links-inside.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/search-console.md -o .agents/skills/mttr-rank-a-page/references/search-console.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -o .agents/skills/mttr-rank-a-page/references/timelines-and-stopping.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/troubleshooting.md -o .agents/skills/mttr-rank-a-page/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .agents\\skills\\mttr-rank-a-page\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/rank-a-page/SKILL.md -OutFile .agents\\skills\\mttr-rank-a-page\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/tracking.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\tracking.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/report.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\report.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\choosing-the-search.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/the-page.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\the-page.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/links-inside.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\links-inside.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/search-console.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\search-console.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\timelines-and-stopping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/troubleshooting.md -OutFile .agents\\skills\\mttr-rank-a-page\\references\\troubleshooting.md -UseBasicParsing"
        },
        "cursor": {
          "folder": ".cursor/skills/mttr-rank-a-page",
          "unix": "mkdir -p .cursor/skills/mttr-rank-a-page/references && curl -fsSL https://mttr.si/skills/rank-a-page/SKILL.md -o .cursor/skills/mttr-rank-a-page/SKILL.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/tracking.md -o .cursor/skills/mttr-rank-a-page/references/tracking.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/report.md -o .cursor/skills/mttr-rank-a-page/references/report.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -o .cursor/skills/mttr-rank-a-page/references/choosing-the-search.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/the-page.md -o .cursor/skills/mttr-rank-a-page/references/the-page.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/links-inside.md -o .cursor/skills/mttr-rank-a-page/references/links-inside.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/search-console.md -o .cursor/skills/mttr-rank-a-page/references/search-console.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -o .cursor/skills/mttr-rank-a-page/references/timelines-and-stopping.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/troubleshooting.md -o .cursor/skills/mttr-rank-a-page/references/troubleshooting.md",
          "windows": "New-Item -ItemType Directory -Force .cursor\\skills\\mttr-rank-a-page\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/rank-a-page/SKILL.md -OutFile .cursor\\skills\\mttr-rank-a-page\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/tracking.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\tracking.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/report.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\report.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\choosing-the-search.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/the-page.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\the-page.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/links-inside.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\links-inside.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/search-console.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\search-console.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\timelines-and-stopping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/troubleshooting.md -OutFile .cursor\\skills\\mttr-rank-a-page\\references\\troubleshooting.md -UseBasicParsing"
        },
        "other": {
          "folder": "docs/mttr-rank-a-page",
          "unix": "mkdir -p docs/mttr-rank-a-page/references && curl -fsSL https://mttr.si/skills/rank-a-page/SKILL.md -o docs/mttr-rank-a-page/SKILL.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/tracking.md -o docs/mttr-rank-a-page/references/tracking.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/report.md -o docs/mttr-rank-a-page/references/report.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -o docs/mttr-rank-a-page/references/choosing-the-search.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/the-page.md -o docs/mttr-rank-a-page/references/the-page.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/links-inside.md -o docs/mttr-rank-a-page/references/links-inside.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/search-console.md -o docs/mttr-rank-a-page/references/search-console.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -o docs/mttr-rank-a-page/references/timelines-and-stopping.md && curl -fsSL https://mttr.si/skills/rank-a-page/references/troubleshooting.md -o docs/mttr-rank-a-page/references/troubleshooting.md && echo \"For moving one page up for one search, follow docs/mttr-rank-a-page/SKILL.md.\" >> AGENTS.md",
          "windows": "New-Item -ItemType Directory -Force docs\\mttr-rank-a-page\\references | Out-Null; Invoke-WebRequest https://mttr.si/skills/rank-a-page/SKILL.md -OutFile docs\\mttr-rank-a-page\\SKILL.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/tracking.md -OutFile docs\\mttr-rank-a-page\\references\\tracking.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/report.md -OutFile docs\\mttr-rank-a-page\\references\\report.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/choosing-the-search.md -OutFile docs\\mttr-rank-a-page\\references\\choosing-the-search.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/the-page.md -OutFile docs\\mttr-rank-a-page\\references\\the-page.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/links-inside.md -OutFile docs\\mttr-rank-a-page\\references\\links-inside.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/search-console.md -OutFile docs\\mttr-rank-a-page\\references\\search-console.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/timelines-and-stopping.md -OutFile docs\\mttr-rank-a-page\\references\\timelines-and-stopping.md -UseBasicParsing; Invoke-WebRequest https://mttr.si/skills/rank-a-page/references/troubleshooting.md -OutFile docs\\mttr-rank-a-page\\references\\troubleshooting.md -UseBasicParsing; Add-Content AGENTS.md \"For moving one page up for one search, follow docs/mttr-rank-a-page/SKILL.md.\""
        }
      }
    }
  ]
}