Skip to Content
AI SearchCrawler Logs

Crawler Logs

Crawler Logs shows you when AI crawlers from ChatGPT, Perplexity, Claude, Google, and others visit your website, and which pages they read. It turns raw bot traffic into a clear view of how AI search engines discover and cite your content in real time.

Accessing Crawler Logs

Go to AI SearchCrawler Logs in the sidebar.

What Crawler Logs Shows You

AI-powered search is changing how people discover content. Crawler Logs helps you understand:

  • Which AI bots are crawling your site - GPTBot, ClaudeBot, PerplexityBot, and others
  • Live retrieval traffic - when ChatGPT or Perplexity cite your content in real time
  • Which pages AI search engines read - what content AI finds valuable
  • Citation patterns - when your site is used as a source in AI answers

Different AI tools behave differently. ChatGPT fetches pages in real time when answering queries, while Perplexity often uses pre-indexed content from background crawls.

Setup

Choose your platform to get started:

Cloudflare Worker

Use a Cloudflare Worker to intercept requests and send visit data to Asky.

This requires a Cloudflare account with Workers enabled. The free tier includes 100,000 requests/day which is sufficient for most sites.

Get Your Domain ID

  1. Log in to your Asky dashboard
  2. Go to AI SearchCrawler Logs in the sidebar
  3. Click Setup Instructions
  4. Copy your Domain ID (a UUID like 1d44d1d2-7396-4721-949d-8817c8e50265)

Create a Cloudflare Worker

  1. Log in to your Cloudflare Dashboard 
  2. Select your website
  3. Go to Workers Routes in the sidebar (under Workers & Pages)
  4. Click Create Route or Manage Workers
  5. Create a new Worker

Add the Worker Code

Paste the following code into your Worker, replacing YOUR_DOMAIN_ID with your actual Domain ID:

export default { async fetch(req, env, ctx) { const url = new URL(req.url); // Skip static assets - they don't need tracking if (url.pathname.match(/\.(png|jpg|jpeg|gif|svg|css|js|ico|woff2?|ttf|map)$/i)) { return fetch(req); } // Build the log payload const log = { ua: req.headers.get("user-agent") || "Unknown", referrer: req.headers.get("referer") || null, host: url.hostname, // Required for security validation path: url.pathname, query: url.search || null, ip: req.headers.get("cf-connecting-ip") || null, ts: Date.now() }; // Send to Asky asynchronously (non-blocking) ctx.waitUntil( fetch("https://zmmfehojjrqgcfapzgqy.supabase.co/functions/v1/collect", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ domain_id: "YOUR_DOMAIN_ID", // Replace with your Domain ID ...log }) }).catch((err) => console.error("Error sending log:", err)) ); // Continue serving the original request return fetch(req); } };

The host field is required for security validation. Asky verifies that the hostname matches the domain registered with your Domain ID, preventing data pollution from unauthorized sources.

Configure the Worker Route

  1. Go to Workers Routes for your domain
  2. Add a route pattern: *yourdomain.com/* (replace with your actual domain)
  3. Select your newly created Worker
  4. Click Save

Make sure to replace yourdomain.com with your actual domain. You may want to exclude certain subdomains like www. if they redirect to your main domain.

Verify Installation

Crawler Logs only shows bot traffic, not regular human visits. To test your setup:

  1. Go to ChatGPT  and ask a question about your site (e.g., “What does [yoursite.com] offer?”)
  2. Check your Asky dashboard → AI SearchCrawler Logs
  3. You should see visits from OpenAI bots appear within seconds

You may see different OpenAI bots depending on how ChatGPT processes your query:

  • ChatGPT Citations (OpenAI) - live fetch when ChatGPT references your content
  • OAI-SearchBot (OpenAI) - search indexing
  • GPTBot (OpenAI) - training data crawler

If no visits appear, try asking about specific content on your pages. You can also use a browser extension to set your User-Agent to GPTBot/1.1 and visit your site directly.

Excluding Subdomains

If you have multiple subdomains and only want to track some of them:

// Skip specific subdomains if (url.hostname === "www.yourdomain.com") { return fetch(req); } if (url.hostname === "api.yourdomain.com") { return fetch(req); }

Excluding Additional Paths

To skip tracking on certain paths (e.g., admin areas):

// Skip admin and API routes if (url.pathname.startsWith("/admin") || url.pathname.startsWith("/api/")) { return fetch(req); }

Detected Bots

Asky automatically detects and categorizes the following AI crawlers:

BotDisplayed AsCompanyType
GPTBotGPTBot (OpenAI)OpenAITraining crawler
ChatGPT-UserChatGPT Citations (OpenAI)OpenAILive retrieval
OAI-SearchBotOAI-SearchBot (OpenAI)OpenAISearch indexing
ClaudeBotClaudeBot (Anthropic)AnthropicTraining crawler
Claude-UserClaude Citations (Anthropic)AnthropicLive retrieval
PerplexityBotPerplexityBot (Perplexity)PerplexityCrawler
Perplexity-UserPerplexity Citations (Perplexity)PerplexityLive retrieval
GooglebotGooglebot (Google)GoogleSearch crawler
BingbotBingbot (Microsoft)MicrosoftSearch crawler

Some Google tokens, like Google-Extended (the Gemini-training opt-out) and Googlebot-News, are robots.txt control tokens only. They have no distinct HTTP user-agent, so they govern crawling preferences but never appear as visits in Crawler Logs. For Google you’ll typically see Googlebot (and, when they crawl, variants such as Googlebot-Image, GoogleOther, and Google-CloudVertexBot).

Troubleshooting

No Data Appearing

  1. Check your Domain ID - verify you are using the correct UUID from your Asky dashboard
  2. Check logs - look for errors in your platform’s logs (Cloudflare Workers, Vercel, etc.)
  3. Wait a moment - data may take a few seconds to appear

403 Domain Mismatch Error

If you see 403 errors, the host field does not match the domain registered with your Domain ID.

  1. Ensure host is included in your log payload
  2. Check your domain registration - the hostname must exactly match (e.g., example.com vs www.example.com)
  3. Handle www variants - normalize the hostname: host.replace(/^www\./, '')

High Request Volume

The tracking runs on every request. To reduce volume:

  • Add more static file extensions to the skip list
  • Skip paths that do not need tracking (like /api/*)
  • Consider only tracking specific paths you care about

Next Steps

  • See which of your pages AI crawlers visit in Pages
  • Read the answers those crawls help inform in Responses

Need help setting up crawler tracking? Reach out at hello@askylabs.com.

Last updated on