{
  "title": "Inspect page SEO signals — settings",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "urls": {
      "title": "Public pages to inspect",
      "type": "array",
      "description": "Up to 100 public HTTP(S) page URLs. Omitted or empty uses https://wordpress.org/ and https://nextjs.org/. Only these pages and their redirects are fetched; links are counted but not crawled.",
      "editor": "stringList",
      "maxItems": 100,
      "prefill": [
        "https://wordpress.org/",
        "https://nextjs.org/"
      ],
      "sectionCaption": "Pages and optional targets"
    },
    "expectedFinalUrls": {
      "title": "Expected final URLs — migration check",
      "type": "object",
      "description": "Optional object mapping each source URL to its expected final HTTP(S) URL, for example {\"http://wordpress.org/\":\"https://wordpress.org/\"}. Every key must also appear in urls. The target is compared with the observed final URL and declared canonical; it is not fetched separately.",
      "editor": "json"
    },
    "comparePrevious": {
      "title": "Compare selected page observations",
      "type": "boolean",
      "description": "Opt in to named snapshot storage. First use creates an observation baseline; later runs report changed fields and new/resolved issue codes. Unchanged pages are still emitted and billed. Actual HTTP error responses can replace a baseline; network, robots and unsupported-content errors do not.",
      "default": false,
      "sectionCaption": "Saved comparisons"
    },
    "snapshotName": {
      "title": "Comparison history name",
      "type": "string",
      "description": "Optional namespace, up to 100 characters, for independent page monitors. Source URL and expected final URL also identify the scope. Avoid overlapping runs with the same namespace and scope.",
      "editor": "textfield",
      "default": "default",
      "maxLength": 100
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "Own wall-clock budget, shared by requests and bounded by the platform deadline with a safety margin. Work unfinished at the deadline is reported in SUMMARY.",
      "default": 240,
      "minimum": 30,
      "maximum": 3600,
      "sectionCaption": "Run budget"
    }
  },
  "description": "For site owners and migration reviewers, inspect concrete page signals and compare selected observations without inventing an SEO score. Supplied pages and HTTP redirects only. Static HTML is inspected; JavaScript rendering and real search-engine indexing are not tested."
}
