{"schemaVersion":"1","scan":{"id":"de4e2154-87c9-4018-af3c-d4a75e314bbe","domain":"grindr.com","region":"us-east","userAgent":"AgentSpeedBot/1.0","viewport":"1280x800","startedAtIso":"2026-08-26T21:56:35.317Z","finishedAtIso":"2026-08-26T21:56:37.580Z","durationMs":2263},"rubric":{"version":"2026.11.0","sha":"fd2d0686690660ae60ecfe9d4e7ac2ac689ef4c935e45b49fae782b9e2587349","gradeBandVersion":"1"},"score":{"composite":75,"grade":"C","components":[{"key":"discoverability","value":54},{"key":"readability","value":82},{"key":"structured_data","value":75},{"key":"actionability","value":73},{"key":"performance","value":100}]},"attestation":{"total":37,"deterministic":26,"heuristic":10,"llmAssisted":1},"checks":[{"key":"actionability.agent_skills","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":404}},{"key":"actionability.commerce_protocols","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{}},{"key":"actionability.web_mcp","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{}},{"key":"auth.cookie_consent_blocks_content","status":"pass","determinism":"heuristic","weight":2,"weightApplied":2,"durationMs":20,"rawValue":{},"heuristicParam":{"label":"detector","value":"consent overlay heuristic"}},{"key":"auth.paywall_or_login_wall_on_landing","status":"pass","determinism":"heuristic","weight":2,"weightApplied":2,"durationMs":6,"rawValue":{"loginForms":0,"sparseContent":false,"hasPaywallText":false,"passwordInputs":0,"loginRedirected":false},"heuristicParam":{"label":"detector","value":"paywall/login-wall heuristic"}},{"key":"coherence.jsonld_name_matches_visible","status":"pass","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"matched":1,"jsonLdNames":["Grindr"]}},{"key":"coherence.jsonld_price_matches_visible","status":"fail","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":11,"rawValue":{"jsonLdPrices":["0"],"visiblePrices":[]}},{"key":"coherence.language_declared_matches_content","status":"pass","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"declared":"en","detected":"en"},"heuristicParam":{"label":"detector","value":"stopword/script profile, >=40 words, WARN-only"}},{"key":"content.headings_hierarchy","status":"warn","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":18,"rawValue":{"skips":0,"total":2,"issues":["2 <h1> tags (expected 1)"],"h1Count":2},"heuristicParam":{"label":"rule","value":"single H1, no skipped levels"}},{"key":"content.js_required_for_primary_content","status":"pass","determinism":"heuristic","weight":2,"weightApplied":2,"durationMs":0,"rawValue":{"staticTextChars":999,"measuredStatically":true},"heuristicParam":{"label":"detector","value":"no-JS visibility heuristic"}},{"key":"content.text_ratio","status":"fail","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"ratio":0.01375242909753081,"htmlBytes":73587,"textBytes":1012,"styleBytes":12142,"markupBytes":49848,"scriptBytes":10585},"heuristicParam":{"label":"min text ratio","value":"15%"}},{"key":"discoverability.api_catalog","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":404}},{"key":"discoverability.link_headers","status":"warn","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{}},{"key":"discoverability.mcp_server_card","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":404}},{"key":"discoverability.oauth_authorization_server","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":404}},{"key":"discoverability.oauth_protected_resource","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":404}},{"key":"discoverability.web_bot_auth","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":404}},{"key":"journey.primary_probe","status":"pass","determinism":"llm_assisted","weight":2,"weightApplied":2,"durationMs":763,"rawValue":{"priceOrCta":"Get the App","primaryOffering":"LGBTQ+ dating and social networking app"}},{"key":"llms_txt.present","status":"pass","determinism":"deterministic","weight":2,"weightApplied":0,"durationMs":0,"rawValue":{"bytes":20560,"hasH1":false,"hasLink":false}},{"key":"markup.canonical","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":5,"rawValue":{"declared":"https://www.grindr.com","resolved":"https://www.grindr.com/","matchesSelf":true}},{"key":"markup.language","status":"pass","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"lang":"en","alternates":0}},{"key":"markup.meta_description","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":19,"rawValue":{}},{"key":"markup.title","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":18,"rawValue":{}},{"key":"operability.filters_addressable","status":"skip","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":6,"rawValue":{}},{"key":"operability.primary_action_in_dom","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":20,"rawValue":{"examples":["<a> announcing \"download\"","<a> announcing \"download\""],"actionableCount":2}},{"key":"performance.full_render_ms","status":"skip","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{},"heuristicParam":{"label":"threshold","value":"4s"}},{"key":"performance.payload_kb","status":"pass","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{},"heuristicParam":{"label":"threshold","value":"3MB"}},{"key":"performance.ttfb_ms","status":"pass","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"ttfbMs":134},"heuristicParam":{"label":"threshold","value":"800ms"}},{"key":"reachability.status","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":0,"rawValue":{"code":200,"redirects":1}},{"key":"readability.markdown_negotiation","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"status":200}},{"key":"robots_txt.allows_known_agents","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":0,"rawValue":{"blocked":[],"declaredMarkets":[],"regionalBlocked":[],"trainingBlocked":[]}},{"key":"robots_txt.content_signals","status":"fail","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{}},{"key":"robots_txt.present","status":"pass","determinism":"deterministic","weight":1,"weightApplied":1,"durationMs":1,"rawValue":{}},{"key":"sitemap.present","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":0,"rawValue":{}},{"key":"structured_data.jsonld_present","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":0,"rawValue":{"count":1}},{"key":"structured_data.type_coverage","status":"pass","determinism":"heuristic","weight":1,"weightApplied":1,"durationMs":0,"rawValue":{"declared":["SoftwareApplication","Offer","Organization","ImageObject"]},"heuristicParam":{"label":"match","value":"type-to-purpose inference"}},{"key":"structured_data.validates","status":"pass","determinism":"deterministic","weight":2,"weightApplied":2,"durationMs":0,"rawValue":{"reports":1,"skipped":1,"checkable":0,"validatedCount":0}}],"findings":[{"checkKey":"coherence.jsonld_price_matches_visible","severity":"critical","title":"Failing: coherence.jsonld_price_matches_visible","remediationMd":"JSON-LD declares 1 price(s) (0), but the served HTML shows no price at all. An agent reading the page sees a price humans never see, or the visible price only renders via JavaScript. Either way the two channels disagree.","docUrl":null},{"checkKey":"actionability.agent_skills","severity":"medium","title":"Failing: actionability.agent_skills","remediationMd":"No Agent Skills manifest at /.well-known/agent-skills.json. Enumerate the tasks agents can perform (search, add-to-cart, contact-support) so they pick the right one without scraping.","docUrl":null},{"checkKey":"actionability.commerce_protocols","severity":"medium","title":"Failing: actionability.commerce_protocols","remediationMd":"No agentic-commerce discovery manifest (x402 at /.well-known/x402.json, UCP at /.well-known/ucp, or ACP at /.well-known/acp.json). Agents that buy pre-flight these before attempting a transaction; publishing the one for your commerce protocol is how they learn you accept agent-initiated purchases.","docUrl":null},{"checkKey":"actionability.web_mcp","severity":"medium","title":"Failing: actionability.web_mcp","remediationMd":"No WebMCP detected. On pages with first-class actions (cart, support, account), embed a WebMCP server so on-page agents invoke tools directly.","docUrl":null},{"checkKey":"content.headings_hierarchy","severity":"medium","title":"Warning: content.headings_hierarchy","remediationMd":"Heading issues: 2 <h1> tags (expected 1).","docUrl":null},{"checkKey":"content.text_ratio","severity":"medium","title":"Failing: content.text_ratio","remediationMd":"Visible text is 1.4% of HTML weight (1012/73587 bytes). 14% of the document is inline script, 68% is markup.","docUrl":null},{"checkKey":"discoverability.api_catalog","severity":"medium","title":"Failing: discoverability.api_catalog","remediationMd":"No /.well-known/api-catalog (RFC 9727) and no /openapi.json|yaml. Publish one so agents that integrate with APIs can discover your endpoints.","docUrl":null},{"checkKey":"discoverability.link_headers","severity":"medium","title":"Warning: discoverability.link_headers","remediationMd":"A Link: header is present but carries none of canonical/alternate/describedby, the relations agents consume.","docUrl":null},{"checkKey":"discoverability.mcp_server_card","severity":"medium","title":"Failing: discoverability.mcp_server_card","remediationMd":"No valid MCP Server Card at /.well-known/mcp/server-card.json. Publish one so agents can discover your tools without HTML scraping.","docUrl":null},{"checkKey":"discoverability.oauth_authorization_server","severity":"medium","title":"Failing: discoverability.oauth_authorization_server","remediationMd":"No RFC 8414 metadata at /.well-known/oauth-authorization-server. Agents that act on behalf of users need this to discover your authorization endpoints.","docUrl":null},{"checkKey":"discoverability.oauth_protected_resource","severity":"medium","title":"Failing: discoverability.oauth_protected_resource","remediationMd":"No RFC 9728 metadata at /.well-known/oauth-protected-resource. Publish it so agents can discover required scopes without hand-coded credentials.","docUrl":null},{"checkKey":"discoverability.web_bot_auth","severity":"medium","title":"Failing: discoverability.web_bot_auth","remediationMd":"No Web Bot Auth JWKS at /.well-known/http-message-signatures-directory.json. Publish one to allow trusted agents while keeping a default-deny posture for the rest.","docUrl":null},{"checkKey":"readability.markdown_negotiation","severity":"medium","title":"Failing: readability.markdown_negotiation","remediationMd":"Accept: text/markdown returns HTML, not markdown. Serve a markdown variant of primary content when requested; agents summarize and cite it more reliably.","docUrl":null},{"checkKey":"robots_txt.content_signals","severity":"medium","title":"Failing: robots_txt.content_signals","remediationMd":"No Content-Signal directives. Add e.g. `Content-Signal: ai-train=no, ai-summarize=yes` to declare granular AI usage policy beyond binary allow/disallow.","docUrl":null}],"citation":"grindr.com · r2026.11.0 · scan de4e2154 · 2026-08-26T21:56Z"}