Capture AI crawlers on a Webflow site.
Last reviewed 2026-10-19
Use Webflow's supported Cloudflare Orange-to-Orange path, then attach an AI crawler Worker.
Webflow has no request logs or server code. Put the site behind Cloudflare with Webflow's supported Orange-to-Orange setup, then a Cloudflare Worker reports AI crawlers. Virent only reads requests; it never changes your Webflow site.
You need your site ID and server secret from Settings → Connection (see Hosting integrations). In the dashboard, Connect analytics → Hosting integrations → Webflow shows these steps with your site ID, domain and secret filled in. Below, replace <your-site-id>, <paste-your-server-secret> and example.com with your own values.
Set up with your coding agent
Hand the setup to Claude Code, Codex or another coding agent. Replace the site ID and example.com with your own; the agent asks you for the server secret. In the dashboard, Install with AI fills them in.
Configure Webflow so example.com sends reliable AI crawler request telemetry to Virent.
Site ID: <your-site-id>
Use the full Virent server secret from the Connect dialog. Do not use the masked preview "vha_sk_••••" as the real value.
Use the current provider documentation: https://help.webflow.com/hc/en-us/articles/45039458051347-Using-Cloudflare-Orange-to-Orange-O2O-with-Webflow
Steps:
1. Confirm Orange-to-Orange eligibility: Confirm the Webflow site is on migrated infrastructure and complete Webflow domain verification before enabling Cloudflare Orange-to-Orange. Do not proxy a legacy Webflow site: it can produce TLS 525 errors.
2. Enable the supported Webflow proxy: Follow Webflow’s Orange-to-Orange guide, point the proxied CNAME at cdn.webflow.com, and confirm the custom domain still resolves and serves the published site.
3. Attach AI crawler tracking: Create a Worker with this code, add VIRENT_INGEST_SECRET as a Worker secret, and bind it to the Webflow hostname after Orange-to-Orange is healthy.
const SITE_ID = "<your-site-id>"
const INGEST = "https://virent.app/v1/ingest/bot"
// Send eligible requests for classification by Virent.
const ASSET = /\.(?!(?:html?|txt|md|xml|json|pdf)$)[a-z0-9]+$/i
export default {
async fetch(request, env, ctx) {
const response = await fetch(request)
ctx.waitUntil(report(request, response, env.VIRENT_INGEST_SECRET).catch(() => {}))
return response
},
}
async function report(request, response, secret) {
if (request.method !== "GET") return
const url = new URL(request.url)
const userAgent = request.headers.get("user-agent") || ""
if (ASSET.test(url.pathname)) return
const cf = request.cf || {}
await fetch(INGEST, {
method: "POST",
headers: {
"content-type": "application/json",
"x-api-key": secret,
},
body: JSON.stringify({
siteId: SITE_ID,
url: url.origin + url.pathname,
host: url.host,
path: url.pathname,
query: {},
method: request.method,
statusCode: response.status,
userAgent,
accept: request.headers.get("accept"),
acceptLanguage: request.headers.get("accept-language"),
referer: null,
country: cf.country || null,
requestId: request.headers.get("cf-ray") || crypto.randomUUID(),
timestamp: new Date().toISOString(),
}),
})
}
4. Activate and verify: Activate the Worker, verify Webflow pages and assets, then request https://example.com/ as an AI crawler and confirm it appears in Virent.
Keep the secret server-side, preserve 100% request coverage where the provider supports sampling, and verify both normal site delivery and a crawler request after activation.Steps#
Confirm Orange-to-Orange eligibility
Confirm the Webflow site is on migrated infrastructure and complete Webflow domain verification before enabling Cloudflare Orange-to-Orange. Do not proxy a legacy Webflow site: it can produce TLS 525 errors.
Enable the supported Webflow proxy
Follow Webflow’s Orange-to-Orange guide, point the proxied CNAME at cdn.webflow.com, and confirm the custom domain still resolves and serves the published site.
Attach AI crawler tracking
Create a Worker with this code, add VIRENT_INGEST_SECRET as a Worker secret, and bind it to the Webflow hostname after Orange-to-Orange is healthy.
worker.jsconst SITE_ID = "<your-site-id>"const INGEST = "https://virent.app/v1/ingest/bot"// Send eligible requests for classification by Virent.const ASSET = /\.(?!(?:html?|txt|md|xml|json|pdf)$)[a-z0-9]+$/iexport default { async fetch(request, env, ctx) { const response = await fetch(request) ctx.waitUntil(report(request, response, env.VIRENT_INGEST_SECRET).catch(() => {})) return response },}async function report(request, response, secret) { if (request.method !== "GET") return const url = new URL(request.url) const userAgent = request.headers.get("user-agent") || "" if (ASSET.test(url.pathname)) return const cf = request.cf || {} await fetch(INGEST, { method: "POST", headers: { "content-type": "application/json", "x-api-key": secret, }, body: JSON.stringify({ siteId: SITE_ID, url: url.origin + url.pathname, host: url.host, path: url.pathname, query: {}, method: request.method, statusCode: response.status, userAgent, accept: request.headers.get("accept"), acceptLanguage: request.headers.get("accept-language"), referer: null, country: cf.country || null, requestId: request.headers.get("cf-ray") || crypto.randomUUID(), timestamp: new Date().toISOString(), }), })}Activate and verify
Activate the Worker, verify Webflow pages and assets, then request https://example.com/ as an AI crawler and confirm it appears in Virent.
Check Webflow's current documentation if its screens differ from these steps.
Verify#
Send a test crawler request to your site. The setup dialog in Virent shows "Virent is receiving AI crawler traffic" once the first request arrives.