<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: nexbridge.nl</title>
    <description>The latest articles on DEV Community by nexbridge.nl (@nexbridge).</description>
    <link>https://dev.to/nexbridge</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3949887%2Fcfdac12e-5b0e-4188-bb67-f2a2de0cc814.png</url>
      <title>DEV Community: nexbridge.nl</title>
      <link>https://dev.to/nexbridge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nexbridge"/>
    <language>en</language>
    <item>
      <title>Building an agent-ready website: how to make your site readable for ChatGPT, Perplexity and autonomous agents</title>
      <dc:creator>nexbridge.nl</dc:creator>
      <pubDate>Mon, 25 May 2026 04:18:46 +0000</pubDate>
      <link>https://dev.to/nexbridge/building-an-agent-ready-website-how-to-make-your-site-readable-for-chatgpt-perplexity-and-49f7</link>
      <guid>https://dev.to/nexbridge/building-an-agent-ready-website-how-to-make-your-site-readable-for-chatgpt-perplexity-and-49f7</guid>
      <description>&lt;p&gt;A couple of months ago I was on a Zoom call with the founder of &lt;a href="https://follownow.io" rel="noopener noreferrer"&gt;FollowNow.io&lt;/a&gt;, a social-growth platform we'd just been hired to rebuild. We covered the usual things: Next.js stack, multilingual content, integrating Intercom Fin for support. At the end he added one sentence that ended up reshaping the entire build: &lt;em&gt;"I want our site to be found by ChatGPT and Perplexity, not just Google."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That single line is what separates a 2024 website from a 2026 one. If your site is invisible to LLMs and autonomous agents, you're invisible to a fast-growing slice of search traffic, and you're not going to win it back with a few schema tags. Here's the four-layer stack we shipped to make FollowNow.io agent-ready, with concrete file structures and the SDK-level decisions that matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "agent-ready" actually means
&lt;/h2&gt;

&lt;p&gt;An agent-ready site exposes machine-readable surfaces that LLMs and autonomous agents can consume without having to parse your marketing HTML. Four layers, in priority order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/strong&gt; at the root → a canonical text document describing what you do, what you don't do, and your public URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAPI 3.1&lt;/strong&gt; spec at &lt;code&gt;/openapi.json&lt;/code&gt; → formal description of the safe, read-only API endpoints agents can call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent skills&lt;/strong&gt; at &lt;code&gt;/.well-known/agent-skills/&lt;/code&gt; → structured "skills" agents can pick up to perform specific tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep JSON-LD structured data&lt;/strong&gt; → not just Organization, but Product, Offer, FAQPage and BreadcrumbList everywhere relevant.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this is hard to ship. The discipline is making sure every layer is generated from a single canonical source so it can't drift from your actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 1: &lt;code&gt;llms.txt&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Like &lt;code&gt;robots.txt&lt;/code&gt; but invitational instead of restrictive. Keep it under 10KB so it fits in an agent's context window. The structure we use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# FollowNow&lt;/span&gt;
&lt;span class="gt"&gt;
&amp;gt; Real growth, with receipts. Verified social-growth ordering across 15 platforms.&lt;/span&gt;

&lt;span class="gu"&gt;## Catalog&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; https://follownow.io/instagram/followers/buy
&lt;span class="p"&gt;-&lt;/span&gt; https://follownow.io/tiktok/views/buy
&lt;span class="p"&gt;-&lt;/span&gt; ... [generated from services.ts at build time]

&lt;span class="gu"&gt;## Policies&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; 14-day refund per EU Article 16(m)
&lt;span class="p"&gt;-&lt;/span&gt; Auto-refill via supplier API where supported (90d window)
&lt;span class="p"&gt;-&lt;/span&gt; No password ever requested

&lt;span class="gu"&gt;## What we do NOT do&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; No Trustpilot review manipulation
&lt;span class="p"&gt;-&lt;/span&gt; No fake Google reviews
&lt;span class="p"&gt;-&lt;/span&gt; No ban/removal services
&lt;span class="p"&gt;-&lt;/span&gt; No mass DM, no biometric data, no fake app installs

&lt;span class="gu"&gt;## API&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Public OpenAPI at /openapi.json
&lt;span class="p"&gt;-&lt;/span&gt; Agent skills at /.well-known/agent-skills/

&lt;span class="gu"&gt;## Contact&lt;/span&gt;
contact@follownow.io
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "what we do NOT do" block is the surprise winner. LLMs weight explicit exclusions heavily when choosing between competing sources. It frames you as the trustworthy option without you having to claim trustworthiness.&lt;/p&gt;

&lt;p&gt;You can see the live version at &lt;a href="https://follownow.io/llms.txt" rel="noopener noreferrer"&gt;follownow.io/llms.txt&lt;/a&gt;. In a Next.js App Router project, this lives in a route handler so it's generated from your data layer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app/llms.txt/route.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;services&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@/lib/catalog/services&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;renderLlmsText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;services&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;content-type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text/plain; charset=utf-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Layer 2: OpenAPI 3.1
&lt;/h2&gt;

&lt;p&gt;This is where you let agents call your system safely. Keep the public spec small and read-only. For FollowNow we exposed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/health&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/target-lookup&lt;/code&gt; (verify a public Instagram handle exists)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST /api/waitlist/signup&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/orders/{id}&lt;/code&gt; (public order tracking)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Admin endpoints are intentionally absent. Don't publish your entire surface. The live spec is at &lt;a href="https://follownow.io/openapi.json" rel="noopener noreferrer"&gt;follownow.io/openapi.json&lt;/a&gt; with a human-readable companion at &lt;a href="https://follownow.io/docs/api" rel="noopener noreferrer"&gt;follownow.io/docs/api&lt;/a&gt;. Agents that read OpenAPI 3.1 can directly generate typed clients without scraping your docs page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 3: Agent skills via &lt;code&gt;/.well-known&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;This is the newest layer and where most sites have nothing yet. Agent skills are structured "vaardigheden" (skills) hosted at &lt;code&gt;/.well-known/agent-skills/&lt;/code&gt; according to an emerging spec.&lt;/p&gt;

&lt;p&gt;For FollowNow we registered four read-only skills, browsable at &lt;a href="https://follownow.io/.well-known/agent-skills/index.json" rel="noopener noreferrer"&gt;follownow.io/.well-known/agent-skills/index.json&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/.well-known/agent-skills/index.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"slug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"read-follow-now-catalog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Read FollowNow catalog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"read"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://follownow.io/.well-known/agent-skills/read-follow-now-catalog/SKILL.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"digest"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sha256-..."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"slug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"read-follow-now-llms-context"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"slug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"check-public-target-format"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"slug"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"read-public-api-docs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each skill points to a &lt;code&gt;SKILL.md&lt;/code&gt; describing what it does, when to use it, inputs and outputs. The SHA-256 digest in &lt;code&gt;index.json&lt;/code&gt; lets agents verify they downloaded the unmodified skill.&lt;/p&gt;

&lt;p&gt;The hard rule we enforced: every registered skill must be read-only. No checkout, no payment, no mutation. Agents can read your catalog, validate input formats, fetch policies. They cannot place orders or change state. That safety boundary is what makes the whole pattern trustable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Layer 4: structured data that LLMs actually read
&lt;/h2&gt;

&lt;p&gt;The most classic SEO layer, with a twist. JSON-LD via Schema.org is read by both Google and every major LLM. What matters is depth. Organization and WebSite are table stakes. For agent-readiness you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Product&lt;/code&gt; per service tier (Standard / Premium / Elite at FollowNow)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Offer&lt;/code&gt; with price, currency and availability&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FAQPage&lt;/code&gt; on every service page&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;BreadcrumbList&lt;/code&gt; on every deep page&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LocalBusiness&lt;/code&gt; if you have any geographic anchor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LLMs prefer JSON-LD over HTML because extraction is deterministic. A FAQ that only exists in HTML has to be parsed with risk of error. The same FAQ in &lt;code&gt;FAQPage&lt;/code&gt; schema is directly usable. The difference shows up in citation frequency.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does it actually work?
&lt;/h2&gt;

&lt;p&gt;Three weeks after &lt;a href="https://follownow.io" rel="noopener noreferrer"&gt;FollowNow&lt;/a&gt; went live, we ran a manual test in ChatGPT, Perplexity and Claude with the same question: &lt;em&gt;"What's a transparent platform to buy verified Instagram followers with a refund policy?"&lt;/em&gt; All three cited FollowNow with direct quotes from the 14-day refund policy and the public target verification.&lt;/p&gt;

&lt;p&gt;Same week, competitors with similar offerings but no &lt;code&gt;llms.txt&lt;/code&gt; and no OpenAPI were not cited at all. That's a single data point, not a study, but it matches the broader pattern: structured machine-readable sources beat marketing pages when an agent has to pick.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to start without rebuilding everything
&lt;/h2&gt;

&lt;p&gt;You don't need a full rewrite. The four layers slot onto any existing Next.js, WordPress or Rails site as long as you can serve files with the right content type. Order I'd recommend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deep structured data first.&lt;/strong&gt; Organization, WebSite, Product, FAQPage. Get the canonical source right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;llms.txt&lt;/code&gt; second.&lt;/strong&gt; Generate it from the same data model so it can't drift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public OpenAPI third.&lt;/strong&gt; Only for read-only endpoints you already have.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent skills last.&lt;/strong&gt; Most experimental, biggest growth ahead.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The investment is small. The leverage compounds as more search shifts to LLM-mediated discovery.&lt;/p&gt;




&lt;p&gt;I write about this stuff at &lt;a href="https://nexbridge.nl" rel="noopener noreferrer"&gt;nexbridge.nl&lt;/a&gt; — we're a Dutch agency building agent-ready Next.js sites and AI automations for SMBs. The full Dutch version of this article with FAQs and code snippets is at &lt;a href="https://nexbridge.nl/blog/agent-ready-website-laten-maken" rel="noopener noreferrer"&gt;nexbridge.nl/blog/agent-ready-website-laten-maken&lt;/a&gt;. If you're curious how this maps onto your stack, &lt;a href="https://nexbridge.nl/contact" rel="noopener noreferrer"&gt;drop me a line&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>nextjs</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
