# Capture AI crawlers on a Webflow site.

> Connect Webflow to Virent AI Crawler Analytics. Use Webflow's supported Cloudflare Orange-to-Orange path, then attach an AI crawler Worker.

Canonical: https://stage.virent.app/docs/integrations/webflow
Last updated: 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](/docs/integrations/overview#before-you-start)). 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

Paste this prompt into Claude Code, Codex or another coding agent. Replace the site ID and example.com with your own.

```text
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://stage.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

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.

   ```javascript
   const SITE_ID = "<your-site-id>"
   const INGEST = "https://stage.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.

Check Webflow's [current documentation](https://help.webflow.com/hc/en-us/articles/45039458051347-Using-Cloudflare-Orange-to-Orange-O2O-with-Webflow) if its screens differ from these steps.

## Verify

Send a [test crawler request](/docs/analytics/ai-crawlers#verify) to your site. The setup dialog in Virent shows "Virent is receiving AI crawler traffic" once the first request arrives.
