crawl.robots.disallow-enforced
Disallow path https://stelnyx.com/preview/ returned 302 — robots.txt Disallow may not be enforced
Fix: Ensure disallowed paths return 403/404/410 rather than 200
Highest score-gain-per-minute fixes for this page.
crawl.robots.disallow-enforced
Disallow path https://stelnyx.com/preview/ returned 302 — robots.txt Disallow may not be enforced
Fix: Ensure disallowed paths return 403/404/410 rather than 200
agent.openapi.discoverable
No OpenAPI/Swagger spec discovered
Fix: Publish openapi.json at /.well-known/openapi.json or /openapi.json
agent.schema-actions.present
No Schema.org potentialAction found
Fix: Add Schema.org potentialAction to your primary entity
agent.llms-txt.quality
llms.txt: 1 section(s), 0 URL(s), 123 bytes
Fix: Expand llms.txt with multiple sections, documentation URLs, and meaningful content
agent.mcp-manifest.valid
MCP manifest found but missing required fields (name/server_name, version, tools/resources)
Fix: Add name (or server_name), version, and at least one tool or resource to mcp.json
crawl.ai-plugin-manifest.present
Moderate
~60m
score: 100
Migrated to agent.ai-plugin.present in v2.0 (agentic_surface category)
Why: /.well-known/ai-plugin.json was defined by OpenAI for ChatGPT plugins. Many agentic systems still look for this file to auto-discover capabilities — it's effectively the /robots.txt of agent APIs.
// /.well-known/ai-plugin.json
{
"schema_version": "v1",
"name_for_human": "Stelnyx — Infrastructure for engineers who ship",
"name_for_model": "stelnyx_—_infrastructure_for_engineers_who_ship",
"description_for_model": "API for Stelnyx — Infrastructure for engineers who ship. Use to answer questions about this product.",
"api": {
"type": "openapi",
"url": "https://stelnyx.com/openapi.json"
}
}crawl.auth-wall
Quick
~0m
score: 100
No auth-wall signals detected
Why: Auth-walled pages require login before crawlers can read content. Flagged for awareness — most AI agents can't authenticate and will see only the login form.
crawl.bot-block
Moderate
~60m
score: 100
No bot-blocking signals detected
Why: WAF challenges that don't recognize legitimate AI bots silently lock you out of LLM training/inference.
crawl.canonical.matches
Quick
~3m
score: 100
Canonical matches final URL (https://stelnyx.com)
Why: Mismatched canonical sends agents to a different URL than the one they fetched.
<link rel="canonical" href="https://stelnyx.com">crawl.canonical.present
Quick
~3m
score: 100
Canonical tag present: https://stelnyx.com
Why: LLM crawlers use canonical to dedupe and pick the authoritative URL.
<link rel="canonical" href="https://stelnyx.com">crawl.hreflang-alternates
Quick
~30m
score: 100
No hreflang alternate links found
Why: hreflang tells agents which language/region variant is canonical for each locale, reducing duplicate-content signals across international site variations.
crawl.http-status
Quick
~30m
score: 100
Primary fetch returned HTTP 200
Why: Non-2xx responses tell agents the page doesn't exist or is broken — score capped at 0.
crawl.js-divergence
Moderate
~120m
score: 100
Static and browser bodies within 0% — no significant JS divergence
Why: When static HTML and browser-rendered HTML diverge heavily, AI crawlers that can't execute JS only see the shell — structured data, headings, and content are invisible.
crawl.llms-txt.present
Quick
~30m
score: 100
Migrated to agent.llms-txt.present in v2.0 (agentic_surface category)
Why: /llms.txt is the emerging standard for site-level guidance to LLM agents.
# https://stelnyx.com/llms.txt
# (https://llmstxt.org)
# Stelnyx — Infrastructure for engineers who ship
> One-paragraph site summary aimed at an LLM agent.
## Docs
- [Getting Started](https://stelnyx.com/docs)
## Optional
- [Changelog](https://stelnyx.com/changelog)crawl.mcp-manifest.present
Moderate
~60m
score: 100
Migrated to agent.mcp-manifest.present in v2.0 (agentic_surface category)
Why: /.well-known/mcp.json is the emerging discovery endpoint for MCP (Model Context Protocol) tool servers. AI agents that support MCP look here first before prompting a user to configure a server manually.
// /.well-known/mcp.json
{
"version": "1.0",
"name": "Stelnyx — Infrastructure for engineers who ship",
"tools": [
{
"name": "search",
"url": "https://stelnyx.com/mcp/search"
}
]
}crawl.redirect-chain
Quick
~15m
score: 100
Redirect chain length: 0
Why: Long redirect chains burn crawl budget and can lose query/state across hops.
crawl.robots.bot-allow.applebot-extended
Quick
~5m
score: 100
applebot-extended is allowed in robots.txt
Why: Explicitly setting Applebot-Extended documents whether Apple AI products may use the content.
# in robots.txt
User-agent: Applebot-Extended
Allow: /crawl.robots.bot-allow.bytespider
Quick
~5m
score: 100
bytespider is allowed in robots.txt
Why: Explicitly allowing Bytespider removes ambiguity for ByteDance crawler access.
# in robots.txt
User-agent: Bytespider
Allow: /crawl.robots.bot-allow.ccbot
Quick
~5m
score: 100
ccbot is allowed in robots.txt
Why: Explicitly allowing CCBot removes ambiguity for Common Crawl visibility.
# in robots.txt
User-agent: CCBot
Allow: /crawl.robots.bot-allow.claudebot
Quick
~5m
score: 100
claudebot is allowed in robots.txt
Why: Explicitly allowing ClaudeBot removes ambiguity for Anthropic crawler access.
# in robots.txt
User-agent: ClaudeBot
Allow: /crawl.robots.bot-allow.google-extended
Quick
~5m
score: 100
google-extended is allowed in robots.txt
Why: Explicitly setting Google-Extended documents whether Google AI products may use the content.
# in robots.txt
User-agent: Google-Extended
Allow: /crawl.robots.bot-allow.gptbot
Quick
~5m
score: 100
gptbot is allowed in robots.txt
Why: Explicitly allowing GPTBot removes ambiguity for OpenAI crawler access.
# in robots.txt
User-agent: GPTBot
Allow: /crawl.robots.bot-allow.perplexitybot
Quick
~5m
score: 100
perplexitybot is allowed in robots.txt
Why: Explicitly allowing PerplexityBot removes ambiguity for Perplexity crawler access.
# in robots.txt
User-agent: PerplexityBot
Allow: /crawl.robots.disallow-enforced
Quick
~20m
score: 0
Disallow path https://stelnyx.com/preview/ returned 302 — robots.txt Disallow may not be enforced
Fix: Ensure disallowed paths return 403/404/410 rather than 200
Why: Robots.txt rules only matter if they are actually enforced by the origin or CDN.
crawl.robots.present
Quick
~5m
score: 100
robots.txt is present
Why: robots.txt is the first file every crawler checks.
# https://stelnyx.com/robots.txt
User-agent: *
Allow: /
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
Sitemap: https://stelnyx.com/sitemap.xmlcrawl.sitemap.child-fetchability
Quick
~45m
score: 100
Sitemap is a flat urlset (not an index) — child fetchability check not applicable
Why: Unfetchable child sitemaps make the sitemap index useless — crawlers cannot discover any of the URLs listed in those children.
crawl.sitemap.discoverable
Quick
~20m
score: 100
Sitemap discovered via robots
Why: Without a sitemap, multi-page agents can't enumerate your site reliably.
# Add to robots.txt:
Sitemap: https://stelnyx.com/sitemap.xmlcrawl.sitemap.domain-mismatch
Quick
~30m
score: 100
All sitemap URLs point to the scanned domain — no domain mismatch detected
Why: Sitemap URLs pointing to a different domain are unfollowable — crawlers and AI agents see a dead sitemap.
# Verify all <loc> entries use your production domain:
# Expected: stelnyx.com
# Found: foreign host(s) in sitemap — update your CMS Site URL and regeneratecrawl.sitemap.effectively-dead
Moderate
~60m
score: 100
Sitemap is functional — at least some content is reachable by crawlers
Why: A sitemap that exists but provides zero reachable content is worse than no sitemap — it signals to crawlers that discovery is supported but yields nothing.
crawl.sitemap.liveness
Quick
~20m
score: 100
3/3 sampled sitemap URL(s) returned 2xx
Why: Stale sitemap URLs waste crawl budget and make discovery less reliable.
crawl.sitemap.parseable
Quick
~30m
score: 100
Sitemap parsed successfully with 3 URL(s)
Why: Empty/invalid sitemaps look the same to a crawler as none at all.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://stelnyx.com/</loc></url>
<!-- add one <url><loc>…</loc></url> per public page -->
</urlset>crawl.sitemap.staging-leak
Quick
~30m
score: 100
No staging/hosting platform domains detected in sitemap URLs
Why: Staging/hosting platform domains in sitemaps indicate a deployment misconfiguration — the sitemap was never regenerated for production.
# WordPress: Settings → General → update WordPress Address + Site Address
# Or in wp-config.php:
define('WP_HOME', 'https://your-production-domain.com');
define('WP_SITEURL', 'https://your-production-domain.com');
# Then regenerate sitemap and resubmit in Google Search Consolecrawl.sitemap.url-health
Quick
~30m
score: 100
3/3 sampled sitemap URLs returned 2xx
Why: Broken URLs in sitemaps waste crawl budget and erode crawler trust in the sitemap's accuracy over time.
crawl.spa-static-mode
Quick
~30m
score: 100
SPA framework detected — static HTML has sufficient text content (ratio 8.3%)
Why: Static HTML should contain meaningful content without requiring JavaScript execution.
crawl.x-robots-header
Quick
~10m
score: 100
No X-Robots-Tag or robots meta tag detected
Why: X-Robots-Tag: noindex tells crawlers (and AI agents) to skip the page. noai and none are increasingly used to opt out of AI training — verify this is intentional.
sd.jsonld.count
Quick
~15m
score: 100
4 JSON-LD block(s) found
Why: JSON-LD is how LLMs reliably extract entity facts (org, products, articles) without parsing prose.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Stelnyx — Infrastructure for engineers who ship",
"url": "https://stelnyx.com"
}
</script>sd.jsonld.entity-types
Quick
~20m
score: 80
Found expected entity types: SoftwareApplication, Organization, WebSite (vertical: saas)
Fix: Add Organization and WebSite JSON-LD; include Article/Product/Service where relevant
Why: Generic JSON-LD without recognised @type doesn't disambiguate the entity for agents.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Stelnyx — Infrastructure for engineers who ship",
"url": "https://stelnyx.com"
}
</script>sd.jsonld.self-consistency
Quick
~20m
score: 100
JSON-LD self-consistency verified (4 check(s) passed)
Why: Conflicting structured data confuses downstream extractors and ranking systems.
sd.jsonld.valid
Quick
~10m
score: 100
4/4 JSON-LD block(s) are valid
Why: Invalid JSON-LD silently breaks structured-data parsers — they just skip the block.
sd.opengraph.complete
Quick
~10m
score: 80
Open Graph missing: image
Fix: Add missing og: meta tags: og:image
Why: OpenGraph drives link previews everywhere (Slack, iMessage, agent UIs that render share cards).
<meta property="og:title" content="Stelnyx — Infrastructure for engineers who ship">
<meta property="og:description" content="Stelnyx builds security, codebase and agent-readiness scanners, plus memory and agent tooling. Some are MIT-licensed CLIs; others are proprietary.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://stelnyx.com">
<meta property="og:image" content="https://stelnyx.com/og-image.png">sd.title-meta.quality
Quick
~5m
score: 100
Title (47 chars) and meta description (146 chars) within spec
Why: <title> + meta description are the snippet agents quote when summarising or citing your page.
<title>Stelnyx — Infrastructure for engineers who ship</title>
<meta name="description" content="Stelnyx builds security, codebase and agent-readiness scanners, plus memory and agent tooling. Some are MIT-licensed CLIs; others are proprietary.">sd.twitter-card.present
Quick
~2m
score: 100
Twitter Card type: summary_large_image
Why: twitter:card extends OpenGraph with X/Twitter-specific layout hints.
<meta name="twitter:card" content="summary_large_image">html.heading-hierarchy
Quick
~30m
score: 100
Heading hierarchy is valid (17 headings, 1 h1, no skips)
Why: Headings give agents the document outline. No h1 = no clear topic.
<!-- Document outline -->
<h1>Page topic in one sentence</h1>
<section>
<h2>Section heading</h2>
<h3>Sub-section</h3>
</section>html.img-alt-coverage
Quick
~30m
score: 100
no <img> elements found, rule skipped
Why: Alt text is how agents (and screen readers) caption images. Missing alt = invisible content.
<img src="/diagram.png" alt="Concise description of what the diagram shows">html.landmarks
Quick
~30m
score: 100
Landmarks present: main, nav, header, footer, article (5/5)
Why: Landmark elements let agents skip nav/footer chrome and zero in on the main content.
<header>
<nav>…site nav…</nav>
</header>
<main>
<article>…page content…</article>
</main>
<footer>…site footer…</footer>html.lang-attr
Quick
~1m
score: 100
<html lang="en"> is set
Why: Without lang, agents can't decide whether to translate or which language model to apply.
<html lang="en">html.link-text-quality
Quick
~20m
score: 100
All 29 link(s) have descriptive text
Why: "click here" / "learn more" tells agents nothing about the destination. Use descriptive link text.
content.action-surface
Quick
~0m
score: 100
Action surface: 24 entry points — 1 form(s), 23 button(s), 0 mailto, 0 tel, 0 ARIA button(s)
Why: Forms, CTA buttons, and contact links are conversion entry points. Agent-driven buyers (using AI to evaluate vendors) look for these signals when deciding whether a site is a real business.
content.boilerplate-ratio
Moderate
~90m
score: 100
Boilerplate ratio: 65.0% (5117 extracted / 7876 total visible bytes)
Why: Lots of nav/footer chrome relative to page body dilutes the signal in agent excerpts.
content.readability-extract
Moderate
~60m
score: 100
Readability extracted 5117 chars of text
Why: If readability extraction returns null, agents likely can't isolate the article body.
content.readability-signal
Quick
~0m
score: 100
Mozilla Readability extracted 5117 chars · siteName: Stelnyx
Why: Mozilla Readability is the same library Firefox Reader View uses; if it can't extract your content, neither can most third-party article scrapers.
content.script-density
Moderate
~60m
score: 50
21 script/iframe elements (21 <script>, 0 cross-origin <iframe>)
Fix: Reduce third-party scripts and cross-origin iframes to improve content signal
Why: Heavy client-side script density is a red flag that content depends on JS to render.
content.signal-noise
Moderate
~90m
score: 30
Signal-noise ratio: 13.0% (8016 text bytes / 61460 total bytes)
Fix: Reduce script/style bloat or increase substantive text content
Why: High script/style-to-text ratio buries the actual content agents are trying to extract.
det.bot-cloaking
Moderate
~60m
score: 100
gptbot and browser fetches returned identical content
Why: Different content to GPTBot vs a browser is the textbook cloaking pattern. Search engines flag this.
det.fetch-stability
Moderate
~60m
score: 100
Two luxfaber fetches returned identical body hash
Why: If the same URL serves different bytes on every fetch, no agent can cache/cite reliably.
det.ua-cloaking
Moderate
~60m
score: 100
luxfaber and browser fetches returned identical content
Why: Serving different content to a Luxfaber UA vs a browser UA = SEO/agent cloaking risk.
agent.ai-plugin.present
Quick
~45m
score: 100
/.well-known/ai-plugin.json found
Why: The plugin manifest is still a useful compatibility signal for older agent runtimes.
agent.cache-headers.quality
Quick
~20m
score: 100
Cache headers present
Why: Good cache headers keep repeated agent fetches efficient and consistent.
agent.head-options.support
Quick
~15m
score: 100
HEAD request supported (HTTP 200)
Why: HEAD and OPTIONS support improve lightweight discovery and probing.
agent.llms-txt.present
Quick
~30m
score: 100
llms.txt present
Why: llms.txt is the clearest site-level guidance file for agentic crawlers.
agent.llms-txt.quality
Quick
~30m
score: 30
llms.txt: 1 section(s), 0 URL(s), 123 bytes
Fix: Expand llms.txt with multiple sections, documentation URLs, and meaningful content
Why: A present but vague llms.txt file does not help agents much.
agent.mcp-manifest.present
Moderate
~60m
score: 100
/.well-known/mcp.json found
Why: MCP discovery helps agents find tool servers without manual setup.
agent.mcp-manifest.valid
Moderate
~60m
score: 20
MCP manifest found but missing required fields (name/server_name, version, tools/resources)
Fix: Add name (or server_name), version, and at least one tool or resource to mcp.json
Why: Invalid MCP manifests are effectively invisible to supporting clients.
agent.openapi.discoverable
Quick
~30m
score: 0
No OpenAPI/Swagger spec discovered
Fix: Publish openapi.json at /.well-known/openapi.json or /openapi.json
Why: OpenAPI discovery gives agents a machine-readable way to inspect your API surface.
agent.pagination.signals
Quick
~20m
score: 0
No pagination signals detected
Why: Pagination signals help crawlers traverse larger collections safely.
agent.rate-limit-headers.present
Quick
~10m
score: 0
No rate-limit headers detected
Why: Rate-limit headers let automated clients back off predictably.
agent.schema-actions.present
Quick
~30m
score: 0
No Schema.org potentialAction found
Fix: Add Schema.org potentialAction to your primary entity
Why: Schema-linked actions let agents execute common workflows directly.
For hosted persistence, dashboards, deploy regression alerts, or human audits, see MONETIZATION.md.