[{
  "inputUrl": "https://moz.com/learn/seo/redirection",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "OK",
  "severity": "ok",
  "issueCodes": "",
  "issueSummary": "",
  "fix": "",
  "firstStatus": 200,
  "finalStatus": 200,
  "finalUrl": "https://moz.com/learn/seo/redirection",
  "hops": 0,
  "chainText": "200",
  "matchesExpected": null,
  "finalTitle": "Redirects: How To Use, SEO Impact & Types (301 vs 302) - Moz",
  "finalCanonical": "https://moz.com/learn/seo/redirection",
  "finalRobots": "all | x-robots-tag: all",
  "totalMs": 218,
  "chain": [
    {
      "step": 0,
      "url": "https://moz.com/learn/seo/redirection",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 124
    }
  ],
  "issues": [],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:58.953Z",
  "xRobots": "all",
  "contentType": "text/html",
  "finalH1": "Redirects: How To Use, SEO Impact & Types (301 vs 302)"
},
{
  "inputUrl": "http://google.com/",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_OK",
  "severity": "notice",
  "issueCodes": "HTTP_FINAL",
  "issueSummary": "HTTP_FINAL: http://www.google.com/",
  "fix": "Final page is served over plain HTTP. Redirect it to the HTTPS version (one 301).",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "http://www.google.com/",
  "hops": 1,
  "chainText": "301 → 200",
  "matchesExpected": null,
  "finalTitle": "Google",
  "finalCanonical": null,
  "finalRobots": "noodp,",
  "totalMs": 234,
  "chain": [
    {
      "step": 0,
      "url": "http://google.com/",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "http://www.google.com/",
      "ms": 133
    },
    {
      "step": 1,
      "url": "http://www.google.com/",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 71
    }
  ],
  "issues": [
    {
      "code": "HTTP_FINAL",
      "severity": "notice",
      "detail": "http://www.google.com/"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:58.969Z",
  "contentType": "text/html"
},
{
  "inputUrl": "http://bing.com/",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_OK",
  "severity": "notice",
  "issueCodes": "HTTP_FINAL, CANONICAL_ELSEWHERE",
  "issueSummary": "HTTP_FINAL: http://www.bing.com/ | CANONICAL_ELSEWHERE: https://www.bing.com/",
  "fix": "Final page is served over plain HTTP. Redirect it to the HTTPS version (one 301).",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "http://www.bing.com/",
  "hops": 1,
  "chainText": "301 → 200",
  "matchesExpected": null,
  "finalTitle": "Search - Microsoft Bing",
  "finalCanonical": "https://www.bing.com/",
  "finalRobots": null,
  "totalMs": 224,
  "chain": [
    {
      "step": 0,
      "url": "http://bing.com/",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "http://www.bing.com/",
      "ms": 74
    },
    {
      "step": 1,
      "url": "http://www.bing.com/",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 66
    }
  ],
  "issues": [
    {
      "code": "HTTP_FINAL",
      "severity": "notice",
      "detail": "http://www.bing.com/"
    },
    {
      "code": "CANONICAL_ELSEWHERE",
      "severity": "notice",
      "detail": "https://www.bing.com/"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:58.959Z",
  "contentType": "text/html"
},
{
  "inputUrl": "http://wikipedia.org/",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_CHAIN",
  "severity": "warning",
  "issueCodes": "REDIRECT_CHAIN",
  "issueSummary": "REDIRECT_CHAIN: 2 hops: 301 → 301 → 200",
  "fix": "Multi-hop chain. Update the first rule to point straight at the final URL (one 301) and update internal links.",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://www.wikipedia.org/",
  "hops": 2,
  "chainText": "301 → 301 → 200",
  "matchesExpected": null,
  "finalTitle": "Wikipedia",
  "finalCanonical": null,
  "finalRobots": null,
  "totalMs": 214,
  "chain": [
    {
      "step": 0,
      "url": "http://wikipedia.org/",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://wikipedia.org/",
      "ms": 95
    },
    {
      "step": 1,
      "url": "https://wikipedia.org/",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://www.wikipedia.org/",
      "ms": 61
    },
    {
      "step": 2,
      "url": "https://www.wikipedia.org/",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 34
    }
  ],
  "issues": [
    {
      "code": "REDIRECT_CHAIN",
      "severity": "warning",
      "detail": "2 hops: 301 → 301 → 200"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:58.945Z",
  "contentType": "text/html",
  "finalH1": "Wikipedia The Free Encyclopedia"
},
{
  "inputUrl": "https://docs.apify.com/platform/actors/running/",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_CHAIN",
  "severity": "warning",
  "issueCodes": "REDIRECT_CHAIN, TEMPORARY_REDIRECT",
  "issueSummary": "REDIRECT_CHAIN: 2 hops: 301 → 302 → 200 | TEMPORARY_REDIRECT: 302 at https://docs.apify.com/actors/running/",
  "fix": "Multi-hop chain. Update the first rule to point straight at the final URL (one 301) and update internal links.",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://docs.apify.com/actors/running",
  "hops": 2,
  "chainText": "301 → 302 → 200",
  "matchesExpected": null,
  "finalTitle": "Run Actors | Platform | Apify Documentation",
  "finalCanonical": "https://docs.apify.com/actors/running",
  "finalRobots": null,
  "totalMs": 192,
  "chain": [
    {
      "step": 0,
      "url": "https://docs.apify.com/platform/actors/running/",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://docs.apify.com/actors/running/",
      "ms": 75
    },
    {
      "step": 1,
      "url": "https://docs.apify.com/actors/running/",
      "status": 302,
      "statusText": "Found",
      "type": "redirect",
      "location": "https://docs.apify.com/actors/running",
      "ms": 22
    },
    {
      "step": 2,
      "url": "https://docs.apify.com/actors/running",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 5
    }
  ],
  "issues": [
    {
      "code": "REDIRECT_CHAIN",
      "severity": "warning",
      "detail": "2 hops: 301 → 302 → 200"
    },
    {
      "code": "TEMPORARY_REDIRECT",
      "severity": "warning",
      "detail": "302 at https://docs.apify.com/actors/running/"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:58.928Z",
  "contentType": "text/html",
  "finalH1": "Run Actors"
},
{
  "inputUrl": "http://apify.com/store",
  "expectedUrl": "https://apify.com/pricing",
  "expectedStatus": null,
  "verdict": "MAP_MISMATCH",
  "severity": "error",
  "issueCodes": "MAP_MISMATCH",
  "issueSummary": "MAP_MISMATCH: lands on https://apify.com/store, map says https://apify.com/pricing",
  "fix": "Lands on a different URL than your redirect map says. Update the rule to point at the expected URL (301, one hop).",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://apify.com/store",
  "hops": 1,
  "chainText": "301 → 200",
  "matchesExpected": false,
  "finalTitle": "Apify Store - 93,000+ web data and automation tools · Apify",
  "finalCanonical": "https://apify.com/store",
  "finalRobots": "index,follow",
  "totalMs": 349,
  "chain": [
    {
      "step": 0,
      "url": "http://apify.com/store",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://apify.com/store",
      "ms": 49
    },
    {
      "step": 1,
      "url": "https://apify.com/store",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 197
    }
  ],
  "issues": [
    {
      "code": "MAP_MISMATCH",
      "severity": "error",
      "detail": "lands on https://apify.com/store, map says https://apify.com/pricing"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.084Z",
  "contentType": "text/html",
  "finalH1": "Apify Store"
},
{
  "inputUrl": "http://github.com/about",
  "expectedUrl": "https://github.com/about",
  "expectedStatus": null,
  "verdict": "MAP_OK",
  "severity": "ok",
  "issueCodes": "",
  "issueSummary": "",
  "fix": "",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://github.com/about",
  "hops": 1,
  "chainText": "301 → 200",
  "matchesExpected": true,
  "finalTitle": "About GitHub · GitHub",
  "finalCanonical": "https://github.com/about",
  "finalRobots": null,
  "totalMs": 393,
  "chain": [
    {
      "step": 0,
      "url": "http://github.com/about",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://github.com/about",
      "ms": 48
    },
    {
      "step": 1,
      "url": "https://github.com/about",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 262
    }
  ],
  "issues": [],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.128Z",
  "contentType": "text/html",
  "finalH1": "Let's build from here"
},
{
  "inputUrl": "https://httpbin.org/redirect/3",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_CHAIN",
  "severity": "warning",
  "issueCodes": "REDIRECT_CHAIN, TEMPORARY_REDIRECT",
  "issueSummary": "REDIRECT_CHAIN: 3 hops: 302 → 302 → 302 → 200 | TEMPORARY_REDIRECT: 302 at https://httpbin.org/redirect/3; 302 at https://httpbin.org/relative-redirect/2; 302 at https://httpbin.org/relative-redirect/1",
  "fix": "Multi-hop chain. Update the first rule to point straight at the final URL (one 301) and update internal links.",
  "firstStatus": 302,
  "finalStatus": 200,
  "finalUrl": "https://httpbin.org/get",
  "hops": 3,
  "chainText": "302 → 302 → 302 → 200",
  "matchesExpected": null,
  "finalTitle": null,
  "finalCanonical": null,
  "finalRobots": null,
  "totalMs": 92,
  "chain": [
    {
      "step": 0,
      "url": "https://httpbin.org/redirect/3",
      "status": 302,
      "statusText": "Found",
      "type": "redirect",
      "location": "https://httpbin.org/relative-redirect/2",
      "ms": 15
    },
    {
      "step": 1,
      "url": "https://httpbin.org/relative-redirect/2",
      "status": 302,
      "statusText": "Found",
      "type": "redirect",
      "location": "https://httpbin.org/relative-redirect/1",
      "ms": 10
    },
    {
      "step": 2,
      "url": "https://httpbin.org/relative-redirect/1",
      "status": 302,
      "statusText": "Found",
      "type": "redirect",
      "location": "https://httpbin.org/get",
      "ms": 11
    },
    {
      "step": 3,
      "url": "https://httpbin.org/get",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 53
    }
  ],
  "issues": [
    {
      "code": "REDIRECT_CHAIN",
      "severity": "warning",
      "detail": "3 hops: 302 → 302 → 302 → 200"
    },
    {
      "code": "TEMPORARY_REDIRECT",
      "severity": "warning",
      "detail": "302 at https://httpbin.org/redirect/3; 302 at https://httpbin.org/relative-redirect/2; 302 at https://httpbin.org/relative-redirect/1"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.140Z",
  "contentType": "application/json"
},
{
  "inputUrl": "https://expired.badssl.com/",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "SSL_ERROR",
  "severity": "error",
  "issueCodes": "SSL_ERROR",
  "issueSummary": "SSL_ERROR: CERT_HAS_EXPIRED: certificate has expired",
  "fix": "TLS certificate problem on this host; browsers and Googlebot will not follow it. Renew or fix the certificate (all hostnames incl. www).",
  "firstStatus": null,
  "finalStatus": null,
  "finalUrl": "https://expired.badssl.com/",
  "hops": 0,
  "chainText": "ERR",
  "matchesExpected": null,
  "finalTitle": null,
  "finalCanonical": null,
  "finalRobots": null,
  "totalMs": 115,
  "chain": [
    {
      "step": 0,
      "url": "https://expired.badssl.com/",
      "status": null,
      "type": "error",
      "location": null,
      "ms": 103
    }
  ],
  "issues": [
    {
      "code": "SSL_ERROR",
      "severity": "error",
      "detail": "CERT_HAS_EXPIRED: certificate has expired"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.191Z",
  "error": "SSL_ERROR",
  "errorDetail": "CERT_HAS_EXPIRED: certificate has expired"
},
{
  "inputUrl": "http://localhost:8080/x",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "PRIVATE_HOST",
  "severity": "notice",
  "issueCodes": "PRIVATE_HOST",
  "issueSummary": "PRIVATE_HOST: localhost resolves to a private/internal address; not checked",
  "fix": "Host resolves to a private/internal address, so it was not requested (security). Not billed when it is the start URL.",
  "firstStatus": null,
  "finalStatus": null,
  "finalUrl": "http://localhost:8080/x",
  "hops": 0,
  "chainText": "ERR",
  "matchesExpected": null,
  "finalTitle": null,
  "finalCanonical": null,
  "finalRobots": null,
  "totalMs": 1,
  "chain": [
    {
      "step": 0,
      "url": "http://localhost:8080/x",
      "status": null,
      "type": "error",
      "location": null
    }
  ],
  "issues": [
    {
      "code": "PRIVATE_HOST",
      "severity": "notice",
      "detail": "localhost resolves to a private/internal address; not checked"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.117Z",
  "error": "PRIVATE_HOST",
  "blocked": true,
  "errorDetail": "localhost resolves to a private/internal address; not checked"
},
{
  "inputUrl": "https://httpbin.org/status/404",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "BROKEN_4XX",
  "severity": "error",
  "issueCodes": "BROKEN_4XX",
  "issueSummary": "BROKEN_4XX: final HTTP 404",
  "fix": "Ends on a 4xx error. 301 it to the closest matching live page, or return 410 if the content is gone for good.",
  "firstStatus": 404,
  "finalStatus": 404,
  "finalUrl": "https://httpbin.org/status/404",
  "hops": 0,
  "chainText": "404",
  "matchesExpected": null,
  "finalTitle": null,
  "finalCanonical": null,
  "finalRobots": null,
  "totalMs": 151,
  "chain": [
    {
      "step": 0,
      "url": "https://httpbin.org/status/404",
      "status": 404,
      "statusText": "Not Found",
      "type": "final",
      "location": null,
      "ms": 151
    }
  ],
  "issues": [
    {
      "code": "BROKEN_4XX",
      "severity": "error",
      "detail": "final HTTP 404"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.203Z",
  "contentType": "text/html"
},
{
  "inputUrl": "http://http.badssl.com/",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "OK",
  "severity": "notice",
  "issueCodes": "HTTP_FINAL",
  "issueSummary": "HTTP_FINAL: http://http.badssl.com/",
  "fix": "Final page is served over plain HTTP. Redirect it to the HTTPS version (one 301).",
  "firstStatus": 200,
  "finalStatus": 200,
  "finalUrl": "http://http.badssl.com/",
  "hops": 0,
  "chainText": "200",
  "matchesExpected": null,
  "finalTitle": "http.badssl.com",
  "finalCanonical": null,
  "finalRobots": null,
  "totalMs": 65,
  "chain": [
    {
      "step": 0,
      "url": "http://http.badssl.com/",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 57
    }
  ],
  "issues": [
    {
      "code": "HTTP_FINAL",
      "severity": "notice",
      "detail": "http://http.badssl.com/"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.178Z",
  "contentType": "text/html",
  "finalH1": "http.badssl.com"
},
{
  "inputUrl": "https://developers.google.com/search/docs/advanced/crawling/301-redirects",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_OK",
  "severity": "ok",
  "issueCodes": "",
  "issueSummary": "",
  "fix": "",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://developers.google.com/search/docs/crawling-indexing/301-redirects",
  "hops": 1,
  "chainText": "301 → 200",
  "matchesExpected": null,
  "finalTitle": "Redirects and Google Search | Google Search Central  |  Documentation  |  Google for Developers",
  "finalCanonical": "https://developers.google.com/search/docs/crawling-indexing/301-redirects",
  "finalRobots": null,
  "totalMs": 503,
  "chain": [
    {
      "step": 0,
      "url": "https://developers.google.com/search/docs/advanced/crawling/301-redirects",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://developers.google.com/search/docs/crawling-indexing/301-redirects",
      "ms": 254
    },
    {
      "step": 1,
      "url": "https://developers.google.com/search/docs/crawling-indexing/301-redirects",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 230
    }
  ],
  "issues": [],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.238Z",
  "contentType": "text/html",
  "finalH1": "Redirects and Google Search"
},
{
  "inputUrl": "https://support.google.com/webmasters/answer/93633",
  "expectedUrl": null,
  "expectedStatus": null,
  "verdict": "REDIRECT_CHAIN",
  "severity": "warning",
  "issueCodes": "REDIRECT_CHAIN, CANONICAL_ELSEWHERE",
  "issueSummary": "REDIRECT_CHAIN: 2 hops: 301 → 301 → 200 | CANONICAL_ELSEWHERE: https://developers.google.com/search/docs/crawling-indexing/301-redirects",
  "fix": "Multi-hop chain. Update the first rule to point straight at the final URL (one 301) and update internal links.",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://developers.google.com/search/docs/crawling-indexing/301-redirects?visit_id=639280980589558957-985854831&rd=1",
  "hops": 2,
  "chainText": "301 → 301 → 200",
  "matchesExpected": null,
  "finalTitle": "Redirects and Google Search | Google Search Central  |  Documentation  |  Google for Developers",
  "finalCanonical": "https://developers.google.com/search/docs/crawling-indexing/301-redirects",
  "finalRobots": null,
  "totalMs": 684,
  "chain": [
    {
      "step": 0,
      "url": "https://support.google.com/webmasters/answer/93633",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://developers.google.com/search/docs/advanced/crawling/301-redirects?visit_id=639280980589558957-985854831&rd=1",
      "ms": 190
    },
    {
      "step": 1,
      "url": "https://developers.google.com/search/docs/advanced/crawling/301-redirects?visit_id=639280980589558957-985854831&rd=1",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://developers.google.com/search/docs/crawling-indexing/301-redirects?visit_id=639280980589558957-985854831&rd=1",
      "ms": 167
    },
    {
      "step": 2,
      "url": "https://developers.google.com/search/docs/crawling-indexing/301-redirects?visit_id=639280980589558957-985854831&rd=1",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 249
    }
  ],
  "issues": [
    {
      "code": "REDIRECT_CHAIN",
      "severity": "warning",
      "detail": "2 hops: 301 → 301 → 200"
    },
    {
      "code": "CANONICAL_ELSEWHERE",
      "severity": "notice",
      "detail": "https://developers.google.com/search/docs/crawling-indexing/301-redirects"
    }
  ],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:00:59.419Z",
  "contentType": "text/html",
  "finalH1": "Redirects and Google Search"
},
{
  "inputUrl": "https://twitter.com/apify",
  "expectedUrl": "https://x.com/apify",
  "expectedStatus": null,
  "verdict": "MAP_OK",
  "severity": "ok",
  "issueCodes": "",
  "issueSummary": "",
  "fix": "",
  "firstStatus": 301,
  "finalStatus": 200,
  "finalUrl": "https://x.com/apify",
  "hops": 1,
  "chainText": "301 → 200",
  "matchesExpected": true,
  "finalTitle": "Apify (@apify) / X",
  "finalCanonical": "https://x.com/apify",
  "finalRobots": "index, follow",
  "totalMs": 2160,
  "chain": [
    {
      "step": 0,
      "url": "https://twitter.com/apify",
      "status": 301,
      "statusText": "Moved Permanently",
      "type": "redirect",
      "location": "https://x.com/apify",
      "ms": 877
    },
    {
      "step": 1,
      "url": "https://x.com/apify",
      "status": 200,
      "statusText": "OK",
      "type": "final",
      "location": null,
      "ms": 939
    }
  ],
  "issues": [],
  "source": "urls",
  "charged": false,
  "checkedAt": "2026-10-20T13:01:00.895Z",
  "contentType": "text/html",
  "finalH1": "Apify"
}]