{
  "schemaVersion": "2.0",
  "scannerVersion": "0.4.0",
  "url": "https://whistlefish.com/",
  "score": 53,
  "level": "Level 2 — Partly discoverable",
  "siteProfile": {
    "type": "informational",
    "source": "inferred",
    "platform": null
  },
  "dimensions": {
    "discoverable": {
      "label": "Discoverable",
      "score": 76,
      "status": "measured",
      "passedWeight": 32,
      "applicableWeight": 42,
      "checks": [
        "robots",
        "sitemap",
        "contentSignals",
        "linkHeaders",
        "llmsTxt"
      ]
    },
    "readable": {
      "label": "Readable",
      "score": 0,
      "status": "measured",
      "passedWeight": 0,
      "applicableWeight": 18,
      "checks": [
        "markdownNegotiation"
      ]
    },
    "actionable": {
      "label": "Actionable",
      "score": null,
      "status": "not_measured",
      "passedWeight": 0,
      "applicableWeight": 0,
      "checks": []
    },
    "trust-access": {
      "label": "Trust & access",
      "score": null,
      "status": "not_measured",
      "passedWeight": 0,
      "applicableWeight": 0,
      "checks": []
    },
    "reliable": {
      "label": "Reliable",
      "score": null,
      "status": "not_measured",
      "passedWeight": 0,
      "applicableWeight": 0,
      "checks": []
    }
  },
  "checks": {
    "robots": {
      "status": "pass",
      "title": "Robots.txt",
      "summary": "Site publishes a valid-looking robots.txt file.",
      "evidence": "# Robots.txt for https://whistlefish.com\n# Version 4.5 (Annotated) Updated 9th June 2026\n# ---------------------------------------------------\n# PURPOSE:\n# v4.5 keeps the v4.4 sitemap fetch fixes and updates the /collections/all rule\n# so that only the generic All Products collection is blocked.\n# This prevents valid collections such as /collections/all-partyware and\n# /collections/all-wrap-accessories from being blocked by robots.txt.\n\n##########################################################\n# Default Rules For All Other Bots\n##########################################################\n\nUser-agent: *\n\n##########################################################\n# 1. Tracking & Pixel Exclusions\n##########################################################\nDisallow: /*wpm@*\nDisallow: /*web-pixel*\nDisallow: /*web-pixels@*\nDisallow: /*tw_source=\nDisallow: /*tw_adid=\nDisallow: /*tw_campaign=\nDisallow: /*tw_medium=\nDisallow: /*utm_*\nDisallow: /*gclid=*\nDisallow: /*fbclid=*\nDisallow: /*ref=\nDisallow: /*referrer=\nDisallow: /*?s=*\nDisallow: /*ranMID=\nDisallow: /*ranEAID=\nDisallow: /*ranSiteID=\nDisallow: /*omnisendContactID=\nDisallow: /*_pos=*&_fid=*&_ss=\nDisallow: /*_sid=*&_ss\nDisallow: /*omnisendAttributionID=\nDisallow: /*_psq=\nDisallow: /*_v=\nDisallow: /*list_generator=\n\n##########################################################\n# 2. Recommendation & Product Tracking Parameters\n##########################################################\nDisallow: /*pr_prod_strat=\nDisallow: /*pr_rec_id=\nDisallow: /*pr_rec_pid=\nDisallow: /*pr_ref_pid=\nDisallow: /*pr_seq=\n\n##########################################################\n# 3. Search, Preview & System Pages\n##########################################################\nDisallow: /search\nDisallow: /*variant=\nDisallow: /*preview_theme_id*\nDisallow: /*preview_script_id*\nDisallow: /password\nDisallow: /admin\nDisallow: /orders\nDisallow: /checkout\nDisallow: /account\nDisallow: /account/activate\nDisallow: /challenge\nDisallow: /*/recommendations/products\n\n##########################################################\n# 4. Cart & Checkout Systems\n##########################################################\nDisallow: /cart\nDisallow: /*/cart*\n\n##########################################################\n# 5. Collection Rules\n##########################################################\nDisallow: /collections/*+*\nDisallow: /collections/*%2B*\nDisallow: /*/collections/*+*\nDisallow: /*/collections/*%2B*\nDisallow: /collections/*?sort_by=\nDisallow: /*/collections/*?sort_by=\nDisallow: /collections/*?filter=\nDisallow: /*/collections/*&*\nDisallow: /collections/vendors*?*q=\nDisallow: /*?perPage=\nDisallow: /*?page=\n\n# Block only the generic All Products collection\nDisallow: /collections/all$\nDisallow: /collections/all?*\n\nDisallow: /collections/*/*\nDisallow: /collections/*_\nDisallow: /*?sort=\n\n##########################################################\n# 6. Blog and Legacy Content\n##########################################################\nDisallow: /blogs/*/tagged\nDisallow: /*scenes&theme=\nDisallow: /*scenes&keywords=\nDisallow: /order\nDisallow: /*order&page=\n# Block trailing slash blog duplicates\nDisallow: /blogs/*/*/\n\n##########################################################\n# 7. Sandbox, Custom, and Test Paths\n##########################################################\nDisallow: /sandbox/\nDisallow: /*sandbox*\nDisallow: /custom/\n\n##########################################################\n# 8. Deprecated or Dynamic Folders\n##########################################################\nDisallow: /apps/\nDisallow: /community/\nDisallow: /tools/\nDisallow: /*.atom\nDisallow: /.well-known/\n\n##########################################################\n# 9. Asset Crawling (CDN)\n##########################################################\n# Allow Shopify theme and file assets required for favicon\nAllow: /cdn/shop/\n\n# Block wider CDN asset crawling\nDisallow: /cdn/\n\n##########################################################\n# 10. International Subfolders\n##########################################################\nDisallow: /fr/collections/*?sort_by=\nDisallow: /fr/collections/*?filter=\nDisallow: /fr/blogs/*/tagged\nDisallow: /fr/collections/vendors*?*q=\nDisallow: /fr/search\nDisallow: /de/collections/*?sort_by=\nDisallow: /de/collections/*?filter=\nDisallow: /de/blogs/*/tagged\nDisallow: /de/collections/vendors*?*q=\nDisallow: /de/search\nDisallow: /pt/collections/*?sort_by=\nDisallow: /pt/collections/*?filter=\nDisallow: /pt/blogs/*/tagged\nDisallow: /pt/collections/vendors*?*q=\nDisallow: /pt/search\nDisallow: /it/collections/*?sort_by=\nDisallow: /it/collections/*?filter=\nDisallow: /it/blogs/*/tagged\nDisallow: /it/collections/vendors*?*q=\nDisallow: /it/search\nDisallow: /no/collections/*?sort_by=\nDisallow: /no/collections/*?filter=\nDisallow: /no/blogs/*/tagged\nDisallow: /no/collections/vendors*?*q=\nDisallow: /no/search\nDisallow: /sv/collections/*?sort_by=\nDisallow: /sv/collections/*?filter=\nDisallow: /sv/blogs/*/tagged\nDisallow: /sv/collections/vendors*?*q=\nDisallow: /sv/search\nDisallow: /da/collections/*?sort_by=\nDisallow: /da/collections/*?filter=\nDisallow: /da/blogs/*/tagged\nDisallow: /da/collections/vendors*?*q=\nDisallow: /da/search\n\n##########################################################\n# 11. Sitemap XML Files\n##########################################################\nAllow: /sitemap.xml\nAllow: /sitemap_*.xml\nAllow: /sitemap_*.xml?*\n\n##########################################################\n# 12. Root Level Query Parameters\n##########################################################\nDisallow: /*?*\n\n##########################################################\n# 13. Allowed JSON Endpoints\n##########################################################\nAllow: /collections/*.json\nAllow: /blogs/*.json\n\n##########################################################\n# 14. Sitemap Declaration\n##########################################################\nSitemap: https://whistlefish.com/sitemap.xml"
    },
    "sitemap": {
      "status": "pass",
      "title": "Sitemap",
      "summary": "Site publishes a reachable sitemap.",
      "evidence": "https://whistlefish.com/sitemap.xml"
    },
    "contentSignals": {
      "status": "fail",
      "title": "Content Signals",
      "summary": "Robots.txt does not declare Content-Signal policy.",
      "fix": "Add a Content-Signal directive to robots.txt to state AI training/search/input policy."
    },
    "linkHeaders": {
      "status": "fail",
      "title": "Link Headers",
      "summary": "Could not fetch homepage to inspect discovery Link headers.",
      "fix": "Expose useful Link headers for JSON alternates, API catalogs or agent manifests."
    },
    "llmsTxt": {
      "status": "pass",
      "title": "LLMs.txt",
      "summary": "Site publishes /llms.txt for LLM-friendly discovery.",
      "evidence": "https://whistlefish.com/llms.txt"
    },
    "markdownNegotiation": {
      "status": "fail",
      "title": "Markdown Negotiation",
      "summary": "Could not fetch homepage with Accept: text/markdown.",
      "fix": "Return Markdown when agents request Accept: text/markdown."
    },
    "apiCatalog": {
      "status": "not_applicable",
      "title": "API Catalog",
      "summary": "API Catalog is not required for an informational site.",
      "evidence": "404"
    },
    "openApi": {
      "status": "not_applicable",
      "title": "OpenAPI description",
      "summary": "OpenAPI description is not required for an informational site.",
      "evidence": "404"
    },
    "mcpServerCard": {
      "status": "not_applicable",
      "title": "MCP Server Card",
      "summary": "MCP Server Card is not required for an informational site.",
      "evidence": "404"
    },
    "agentSkills": {
      "status": "not_applicable",
      "title": "Agent Skills index",
      "summary": "Agent Skills index is not required for an informational site.",
      "evidence": "404"
    },
    "webMcp": {
      "status": "not_applicable",
      "title": "WebMCP",
      "summary": "WebMCP is not required for an informational site."
    },
    "authMd": {
      "status": "not_applicable",
      "title": "Auth.md",
      "summary": "Auth.md is not required for an informational site.",
      "evidence": "404"
    }
  },
  "recommendations": [
    "Return Markdown when agents request Accept: text/markdown.",
    "Add a Content-Signal directive to robots.txt to state AI training/search/input policy.",
    "Expose useful Link headers for JSON alternates, API catalogs or agent manifests."
  ],
  "methodology": "/methodology"
}