Skip to content
J

jmouders.nl

Scan history Scanned 2026-08-29 11:59 UTC
Changes since selected scan Not comparable because methodology information is unavailable

Result summary

Measured stable-core coverage

25/100

Methodology grade

D

Methodology 2026-08-29

27 core checkpoints assessed

Find
0/6 passed
Read
9/20 passed
Act
1/1 passed

Bot protection context

This site uses Cloudflare bot protection. Our scanner received a challenge page instead of real content, so the scores below reflect what AI systems can access, not the actual site quality. Well-known brands may still appear in AI answers via training data and search indexes, but direct access by both crawlers and agents is blocked.

Readiness profiles Filter the detailed results by purpose

Select a profile to filter the detailed results.

Action plan

Priority actions Prioritized by exact impact on the overall stable-core score.
Failed JSON-LD present +6 overall pts

No valid JSON-LD blocks with schema.org @context found.

JSON-LD present
HIGH

JSON-LD is the preferred format for structured data by Google and AI search engines. It tells AI systems exactly what your page is about using a standardized vocabulary.

Add at least one <script type="application/ld+json"> block with "@context": "schema.org" describing your organization or page content. This gives agents an unambiguous, machine-readable description of your page and makes it eligible for rich results in search.

JSON-LD html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://jmouders.nl",
  "logo": "https://jmouders.nl/logo.png"
}
</script>
Failed High-value schema types +6 overall pts

No high-value schema types found. We check for 17 recognized types including Article, Product, SoftwareApplication, FAQPage, LocalBusiness, VideoObject, and more.

High-value schema types
HIGH

Certain schema types (Article, Product, FAQPage, etc.) trigger rich results in Google and Bing and give agents typed, unambiguous entities to extract instead of inferring from prose. Their effect on AI-search citations is indirect, via the search indexes that feed products like ChatGPT and Perplexity.

Add JSON-LD markup for content-appropriate types like Article, Product, SoftwareApplication, FAQPage, LocalBusiness, Service, Event, or VideoObject so agents and search engines can identify your content type and extract structured facts reliably.

JSON-LD html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Your App Name",
  "operatingSystem": "Web",
  "applicationCategory": "BusinessApplication",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  }
}
</script>
Failed robots.txt present +6 overall pts

robots.txt returned HTTP 403.

robots.txt present
HIGH

robots.txt is the universal standard for telling crawlers what they can access. AI crawlers like GPTBot, ClaudeBot and Googlebot-Extended check this file first before crawling your site.

Create a robots.txt file at the root of your website.

robots.txt plain
# /robots.txt
User-agent: *
Allow: /

# Allow AI crawlers explicitly
User-agent: GPTBot
Allow: /

User-agent: ClaudeBot
Allow: /

User-agent: Google-Extended
Allow: /

Sitemap: https://jmouders.nl/sitemap.xml
Failed XML Sitemap +6 overall pts

No valid XML sitemap found. Checked: jmouders.nl/sitemap.xml, jmouders.nl/sitemap_index.xml.

XML Sitemap
HIGH

Sitemaps help AI crawlers discover all your pages efficiently. Without one, crawlers may miss important content or waste time discovering your site structure.

Create an XML sitemap and reference it in robots.txt with a Sitemap: directive.

sitemap.xml html
<!-- /sitemap.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://jmouders.nl/</loc>
    <lastmod>2025-01-15</lastmod>
    <changefreq>weekly</changefreq>
    <priority>1.0</priority>
  </url>
  <url>
    <loc>https://jmouders.nl/about</loc>
    <lastmod>2025-01-10</lastmod>
  </url>
</urlset>

# Add to /robots.txt:
Sitemap: https://jmouders.nl/sitemap.xml
Failed Meta robots / X-Robots-Tag +6 overall pts

Page has noindex directive, preventing AI indexing. Directives found: noindex, nofollow.

Meta robots / X-Robots-Tag
HIGH

Meta robots tags and X-Robots-Tag headers control per-page indexing. Restrictive directives like noindex or noai prevent AI systems from using your content.

Remove the noindex directive to allow AI systems to index this page.

HTML html
<!-- Replace noindex with index to allow AI indexing -->
<meta name="robots" content="index, follow">

<!-- Or remove the meta tag entirely (default is index, follow) -->
Failed HTTP bot accessibility +6 overall pts

Page returned HTTP 403 - the site blocks automated access. All content-based checks below are based on the error page, not the actual content.

HTTP bot accessibility
HIGH

AI crawlers and agents must be able to fetch your pages via HTTP. If bots are blocked, AI systems cannot index or interact with your content.

Allow legitimate bot traffic by configuring your WAF/CDN (Cloudflare, Akamai, etc.) to permit known AI user-agents. Blocking all bots prevents AI agents from accessing your content.

# Cloudflare WAF - allow known AI crawlers (managed rule skip)
# Dashboard → Security → WAF → Custom Rules → Create rule:
#   Field: User Agent | Operator: contains | Value: GPTBot
#   Then: Skip remaining rules

# Nginx - allow specific AI bot user-agents
map $http_user_agent $is_ai_bot {
  default         0;
  "~*GPTBot"      1;
  "~*ClaudeBot"   1;
  "~*Amazonbot"   1;
}
# Use $is_ai_bot in your rate-limiting or access rules
Failed Organization / WebSite schema +5 overall pts

No Organization or WebSite schema type found in JSON-LD.

Organization / WebSite schema
HIGH

Organization and WebSite schemas establish your brand identity in the knowledge graph. AI systems use these to attribute content, display rich results, and build entity relationships.

Add a JSON-LD block with @type "Organization" or "WebSite" including at least "name" and "url" properties.

JSON-LD html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Your Company",
  "url": "https://jmouders.nl",
  "logo": "https://jmouders.nl/logo.png",
  "sameAs": [
    "https://twitter.com/yourcompany",
    "https://linkedin.com/company/yourcompany"
  ]
}
</script>
Failed Heading hierarchy +5 overall pts

No headings found on the page.

Heading hierarchy
HIGH

AI agents use headings to build a content outline and determine topic hierarchy. A clear h1→h2→h3 structure helps AI systems extract and summarize your content accurately.

Add a clear <h1> heading and use sequential heading levels (h1 -> h2 -> h3). Proper heading hierarchy helps AI agents understand page structure and content importance. See developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements for heading element documentation.

HTML html
<h1>Page Title - One Per Page</h1>
  <h2>Main Section</h2>
    <h3>Subsection</h3>
    <h3>Subsection</h3>
  <h2>Another Section</h2>
    <h3>Subsection</h3>
Failed Semantic HTML elements +5 overall pts

No semantic HTML elements found (<header>, <nav>, <main>, <article>/<section>, <footer>).

Semantic HTML elements
HIGH

Browser agents may combine the DOM, accessibility tree, and screenshots. Semantic elements like <main>, <nav>, and <article> provide durable structural meaning across those representations.

Add missing semantic elements: article or section, header, nav, main, footer. Semantic HTML helps AI agents identify page regions and navigate content structure. See developer.mozilla.org/en-US/docs/Glossary/Semantics#semantics_in_html for semantic HTML documentation.

HTML html
<body>
  <header>
    <nav><!-- primary navigation --></nav>
  </header>
  <main>
    <article>
      <h1>Page Title</h1>
      <section><!-- content section --></section>
    </article>
  </main>
  <footer><!-- site footer --></footer>
</body>
Failed HSTS header +5 overall pts

Strict-Transport-Security header is not set. Note: sites on the HSTS preload list may not send this header but are still protected via browser preloading.

HSTS header
HIGH

HSTS prevents protocol downgrade attacks by telling browsers to always use HTTPS. AI agents that follow redirects benefit from HSTS as it eliminates insecure initial connections.

Add the Strict-Transport-Security header with max-age=31536000 (1 year) and includeSubDomains. If your site is on the HSTS preload list (hstspreload.org), the header is still recommended for first-visit protection.

Server config plain
# Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# Apache (.htaccess)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Failed Content freshness signals +4 overall pts

No content freshness signals found. AI systems cannot determine when this content was last updated.

Content freshness signals
HIGH

AI systems prefer recent content, and several engines surface newer pages more often. Clear date signals (dateModified, article:modified_time) help AI determine your content's recency.

Add content date signals so AI systems can assess freshness. Use dateModified in JSON-LD, <meta property="article:modified_time">, or at minimum ensure your server sends a Last-Modified header.

JSON-LD html
<!-- Option 1: JSON-LD (preferred) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Your Article Title",
  "datePublished": "2026-01-15T09:00:00Z",
  "dateModified": "2026-02-28T14:30:00Z"
}
</script>

<!-- Option 2: Open Graph meta tags -->
<meta property="article:published_time" content="2026-01-15T09:00:00Z">
<meta property="article:modified_time" content="2026-02-28T14:30:00Z">

<!-- Option 3: HTML time element -->
<time datetime="2026-02-28T14:30:00Z">Updated February 28, 2026</time>

<!-- Server-level: Ensure Last-Modified header is sent -->
# Nginx: add_header Last-Modified $date_gmt;
# Apache: FileETag MTime (default)
Failed Link response headers +4 overall pts

No Link response header found on the root page. Agents must parse HTML to discover related resources.

Link response headers
HIGH

Link response headers (RFC 8288) tell agents about machine-readable resources at request time. Cloudflare's isitagentready.com and other scanners explicitly look for `api-catalog`, `service-desc`, `service-doc`, and `sitemap` rels to enable agent discovery without parsing HTML.

Add an RFC 8288 Link response header advertising your OpenAPI document, API catalog, and sitemap so agents can discover them at request time.

Server config plain
# Nginx
add_header Link '</.well-known/api-catalog>; rel="api-catalog", </openapi.json>; rel="service-desc", </sitemap.xml>; rel="sitemap"' always;

# Phoenix / Plug
plug :put_link_headers

defp put_link_headers(conn, _opts) do
  put_resp_header(
    conn,
    "link",
    "</.well-known/api-catalog>; rel=\"api-catalog\", " <>
      "</openapi.json>; rel=\"service-desc\", " <>
      "</sitemap.xml>; rel=\"sitemap\""
  )
end

# Test: curl -I https://jmouders.nl/ | grep -i '^link:'
Failed Author attribution +3 overall pts

No author attribution found. Agents and search engines cannot tell who stands behind this content or link it to a known author entity.

Author attribution
HIGH

Author attribution gives agents and search engines a clear, machine-readable signal of who stands behind the content and links it to a known entity. This supports trust and provenance (E-E-A-T) and lets systems attribute the content to its author.

Add author information using JSON-LD (preferred), <meta name="author">, or <a rel="author">. Clear authorship is a trust and provenance signal for agents and search engines.

JSON-LD html
<!-- Option 1: JSON-LD author in Article (preferred) -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Your Article Title",
  "author": {
    "@type": "Person",
    "name": "Jane Smith",
    "url": "https://jmouders.nl/team/jane-smith"
  }
}
</script>

<!-- Option 2: Meta tag -->
<meta name="author" content="Jane Smith">

<!-- Option 3: Linked author -->
<a rel="author" href="https://jmouders.nl/team/jane-smith">Jane Smith</a>
Failed Trust anchor pages +3 overall pts

Verified none; missing or thin: about, contact, privacy.

Trust anchor pages
HIGH

Agents check about, contact and privacy pages to verify a business is legitimate and to answer contact questions before recommending it. Thin or missing trust pages read as an anonymous site.

Publish real /about, /contact and /privacy pages (or localized equivalents linked from the home page) with at least 500 characters of content each, and link them from the footer so agents and crawlers can find them.

Partial Server-side rendered content +2 overall pts

Limited visible text (41 chars) but <noscript> fallback present.

Server-side rendered content
MEDIUM

Fetch-only crawlers and non-rendered retrieval cannot depend on client-side JavaScript. Browser agents may combine the rendered DOM, accessibility tree, and screenshots. Meaningful server-rendered HTML keeps core content available across both access modes.

Render meaningful content in the initial HTML with server-side rendering (SSR) or static site generation (SSG). This supports fetch-only crawlers and non-rendered retrieval while giving browser agents a reliable DOM and accessibility tree. See web.dev/articles/ai-agent-site-ux for current agent-friendly guidance.

page.js plain
// Next.js - use getServerSideProps for SSR
export async function getServerSideProps() {
  const data = await fetchData();
  return { props: { data } };
}

// Or use generateStaticParams for SSG (App Router)
export async function generateStaticParams() {
  return [{ slug: "about" }, { slug: "contact" }];
}
Partial Soft-404 hygiene +2 overall pts

A randomized unknown path returned HTTP 403 rather than 404 or 410, so agents cannot reliably classify it as missing.

Soft-404 hygiene
MEDIUM

Agents and crawlers rely on a real 404 or 410 status to know a resource is missing. A 200 with the app shell (soft 404) makes them believe every probed path exists, pollutes indexes, and hides broken links from monitoring.

Answer unknown paths with HTTP 404 (or 410 for removed resources) instead of 403. Redirecting or challenging unknown paths hides whether a resource exists.

# Phoenix: let unmatched routes reach a real 404 instead of a catch-all redirect
# Express:
app.use((req, res) => {
  res.status(404).type("text/markdown").send("# Not found\n\nSee /sitemap.xml and /llms.txt");
});
# Nginx: never rewrite unknown paths to index.html for non-SPA routes
try_files $uri $uri/ =404;
Partial Accessible landmarks & ARIA +2 overall pts

1 landmark regions via semantic HTML (main). No additional ARIA attributes found.

Accessible landmarks & ARIA
MEDIUM

ARIA landmarks help AI agents identify page regions (navigation, main content, footer). This is the same API used by screen readers and is increasingly used by AI browsing agents.

Use semantic HTML elements to define page regions: <header>, <nav>, <main>, <footer>. These provide implicit ARIA landmarks without needing explicit role attributes. See w3.org/WAI/ARIA/apg/patterns/landmarks for the W3C landmarks pattern.

HTML html
<!-- Semantic elements provide implicit ARIA landmarks -->
<header><!-- banner landmark -->
  <nav aria-label="Primary"><!-- navigation landmark -->
    <a href="/" aria-current="page">Home</a>
  </nav>
</header>
<main><!-- main landmark -->
  <article>...</article>
</main>
<footer><!-- contentinfo landmark --></footer>
Fix with AI Skills
$ /plugin marketplace add bartwaardenburg/isagentready-skills

Detailed results

Agent Protocols

Weight 15% · No applicable checkpoints · 5 bonus opportunities

Not assessed
AI Content Discovery

Weight 30% · 6 failed, 1 partial · 4 bonus opportunities

6/100
Security & Trust

Weight 15% · 1 failed checkpoint

73/100
Content & Semantics

Weight 20% · 2 failed, 2 partial

43/100
AI Search Signals

Weight 20% · 5 failed checkpoints

0/100
Supplemental evidence AI visitor test and training exposure. The score does not change.
AI Training Exposure

Does not affect the readiness score

Supplemental

No AI training protections detected. Your content may be freely used for AI model training.

Common Crawl presence Unknown

Could not determine the latest Common Crawl index.

Training crawler blocking Not found

No robots.txt found. Training crawlers can freely access your content.

TDMRep declaration Not found

No TDMRep file found at /.well-known/tdmrep.json. The TDM Reservation Protocol (W3C) lets you declare whether you reserve text and data mining rights. See w3.org/community/reports/tdmrep/CG-FINAL-tdmrep-20240510 for the specification.

ai.txt policy Not found

No ai.txt file found. ai.txt lets you declare AI usage preferences for your content.

Web Bot Auth Not found

No Web Bot Auth signature key directory found. Bots cannot prove their identity to origins via signed HTTP requests.

Next steps

DEVELOPER TOOLS

Scan and fix from your editor. Install the MCP server to scan, and AI skills to fix.

SCAN
$ claude mcp add isagentready-mcp -- npx -y isagentready-mcp
FIX
$ /plugin marketplace add bartwaardenburg/isagentready-skills
Request a detailed report Optional follow-up with a personalized PDF report
Free PDF Report

Get your detailed report

Receive a personalized report with actionable insights for improving your website's AI agent readiness.

  • Detailed score breakdown per category
  • Prioritized improvement recommendations
  • Step-by-step implementation guide

We'll use this address to send report updates.

Add this badge to your README Show the latest ranked grade and link readers to this report
AI readiness badge for jmouders.nl

The badge shows the grade from the latest ranked scan. Caches refresh it within an hour.

Markdown plain
[![AI-ready](https://isagentready.com/badge/jmouders.nl.svg)](https://isagentready.com/en/scan/jmouders.nl)
HTML html
<a href="https://isagentready.com/en/scan/jmouders.nl"><img src="https://isagentready.com/badge/jmouders.nl.svg" alt="AI-ready"></a>