---
title: "Which Pages Does ChatGPT Cite? Find Out in Your Server Logs"
description: "ChatGPT-User, Perplexity-User and Claude-User fetch pages for a person, so your logs hold a citation record. grep and SQL queries, the gaps, and our results."
image: "https://www.blackseoanalyzer.com/static/images/black-seo-analyzer-og-image.png"
canonical: "https://www.blackseoanalyzer.com/en/blog/which-pages-does-chatgpt-cite-server-logs"
language: "en"
---

# How to See Which Pages ChatGPT and Perplexity Cite From Your Site Using Server Logs

By [Seth Black](https://www.blackseoanalyzer.com/en/about) · Published November 01, 2026

You can see which of your pages ChatGPT and Perplexity use in answers by filtering your access logs for their user-initiated fetchers, `ChatGPT-User` and `Perplexity-User` (and `Claude-User` for Claude). Each of those requests happens because a person asked a question that needed your page, so a count per URL is the closest thing to a citation log any site owner has. It is a proxy, not a perfect record, and the limits are below.

## Why are user-initiated fetches a citation proxy?

The vendors describe these agents as fetching on a person’s behalf, not crawling:

| User agent | Vendor’s description | Source |
| --- | --- | --- |
| `ChatGPT-User` | User-initiated actions in ChatGPT and Custom GPTs, such as visiting a page to answer a question | [OpenAI](https://developers.openai.com/api/docs/bots) |
| `Perplexity-User` | Visits pages when a user asks a question, to answer it and link to the page | [Perplexity](https://docs.perplexity.ai/guides/bots) |
| `Claude-User` | Retrieves content in response to a user query | [Anthropic](https://support.claude.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler) |

All three pages were read on 31 October 2026. The index crawlers (OAI-SearchBot, PerplexityBot, Claude-SearchBot) tell you what an assistant could cite. The user fetchers tell you what it actually went and read while answering someone.

## What does the proxy miss?

Be clear about the gaps before you build a report on it:

- **Answers from the index.** If ChatGPT answers from content OAI-SearchBot already indexed, there may be no live fetch at all. A page can be cited without a ChatGPT-User request.
- **Fetches that are not citations.** A user pasting your URL and asking “summarize this” produces a fetch, but you were not picked from a field of competitors.
- **Spoofed agents.** Anyone can put `ChatGPT-User` in a header. Verify IPs against each vendor’s published list (`openai.com/chatgpt-user.json`, `perplexity.ai/perplexity-user.json`, `claude.com/crawling/bots.json`).
- **Probes.** On this site, a large share of user-agent matches were requests for secrets files and paths like `/fetch` and `/proxy`. Someone is routing vulnerability scans through assistant fetchers. Filter those out, and make sure those paths return nothing useful on your server.

## How do you pull them out with grep?

On a combined-format nginx or Apache log, where the request path is field 7 and the status field 9:

```bash
# which assistant fetched what, most first
grep -E 'ChatGPT-User|Perplexity-User|Claude-User' access.log \
  | awk '{print $7}' | sort | uniq -c | sort -rn | head -30

# split by assistant
for ua in ChatGPT-User Perplexity-User Claude-User; do
  echo "== $ua"
  grep "$ua" access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10
done

# only successful fetches; a 403 or 404 was a failed citation
grep -E 'ChatGPT-User|Perplexity-User|Claude-User' access.log \
  | awk '$9 == 200 {print $7}' | sort | uniq -c | sort -rn | head -30
```

Logs rotate, so run this across the compressed files too (`zgrep` does the same job on `.gz` archives).

## How do you query it in ClickHouse or SQL?

If your logs land in a database, the same question is one query. This is close to what I run against our nginx logs in ClickHouse; the column names are ours, so adjust them to your schema:

```sql
SELECT
    multiIf(browser ILIKE '%ChatGPT-User%', 'ChatGPT',
            browser ILIKE '%Perplexity-User%', 'Perplexity',
            browser ILIKE '%Claude-User%', 'Claude', 'other') AS assistant,
    request_path,
    count() AS fetches
FROM nginx_logs
WHERE timestamp >= now() - INTERVAL 90 DAY
  AND (browser ILIKE '%ChatGPT-User%'
       OR browser ILIKE '%Perplexity-User%'
       OR browser ILIKE '%Claude-User%')
  AND status_code = 200
GROUP BY assistant, request_path
ORDER BY fetches DESC
LIMIT 50;
```

Add a weekly bucket (`toStartOfWeek(timestamp)`) to see whether a page is gaining or losing assistant attention after you change it.

## What did it show on this site?

Over the last 90 days on blackseoanalyzer.com, user-initiated fetches went to:

| Page | Fetches |
| --- | --- |
| `/` (homepage) | 1,537 |
| `/en/cli-documentation` | 28 |
| An older Semrush comparison post | 25 |
| Everything else | scanner noise and single fetches |

Monthly volumes for the three fetchers in October 2026 were 1,012 for ChatGPT-User, 866 for Perplexity-User and 829 for Claude-User. The concentration on the homepage says most people are asking assistants about the product, not finding our articles through them. The CLI documentation showing up second makes sense: it is a long, plain HTML reference with dozens of command examples in code blocks, which is easy for a model to quote.

The pages that were fetched share a shape: a direct answer near the top, server-rendered HTML, and lists or tables that can be lifted without rewriting. [How to write a page an LLM will quote](https://www.blackseoanalyzer.com/en/blog/how-to-write-a-page-an-llm-will-quote) turns that into a checklist.

## How does that compare with human referrals?

Fetches are not visitors. Over twelve months, AI products sent this site about 60 human visitors from ChatGPT, 12 from Perplexity, 11 from Claude, and 1 each from Gemini and Kagi. Google organic sent 354 unique humans in October alone. To count your own, filter on the referrer:

```bash
grep -Ei '"https?://(chatgpt\.com|chat\.openai\.com|www\.perplexity\.ai|claude\.ai|gemini\.google\.com)' access.log \
  | awk '{print $7}' | sort | uniq -c | sort -rn | head
```

Some assistants strip the referrer, and ChatGPT search tags many outbound links with `utm_source=chatgpt.com` instead, so check your query strings too. Put fetches and visits side by side and you get an honest picture: assistants read your pages often and send people rarely. [Which AI crawlers hit a website in 2026](https://www.blackseoanalyzer.com/en/blog/which-ai-crawlers-hit-a-website-2026) has the full table for every vendor.

## What should you do with the list?

1. **Fix failed fetches first.** Any user-initiated request that got a `403`, `404` or `5xx` was a person’s question your site failed to answer. A `403` usually means a bot rule upstream; [the AI crawler robots.txt guide](https://www.blackseoanalyzer.com/en/blog/ai-crawler-robots-txt-guide) covers the robots.txt side.
2. **Look at what the fetched pages have that others lack.** Usually it is structure and a direct answer, not length.
3. **Check the pages you expected to see and did not.** If a page that should be cited never gets fetched, check that the index crawlers can read it, and that its content is in the server HTML; [can AI crawlers see JavaScript content](https://www.blackseoanalyzer.com/en/blog/can-ai-crawlers-see-javascript-content) shows the test.

For the robots.txt side, bseoa’s AI-readiness checks report a blocked user fetcher as [Allow User-Initiated Fetches So Shared Links Work](https://www.blackseoanalyzer.com/en/technical-seo/ai-readiness-analyzer/ai-user-action-crawler-blocked), and a site that has blocked every retrieval crawler as [No AI Assistant Can Cite Your Site](https://www.blackseoanalyzer.com/en/technical-seo/ai-readiness-analyzer/no-ai-retrieval-access). It reads robots.txt, not your logs, so the queries above are still how you see what actually happened.

For how this kind of measurement fits into the wider picture, see [GEO vs SEO](https://www.blackseoanalyzer.com/en/geo-vs-seo).

-Sethers

About the author

[Seth Black](https://www.blackseoanalyzer.com/en/about)

Seth is a software engineer and engineering leader who builds bseoa, a Rust-based technical SEO crawler with a GUI and CLI. He writes about the crawling, rendering and indexing problems he runs into on real sites.

[LinkedIn](https://www.linkedin.com/in/seth-black-tx/) · [GitHub](https://github.com/sethblack) · [YouTube](https://www.youtube.com/@SethBlack)

[Back to Blog](https://www.blackseoanalyzer.com/en/blog)

## Discover hundreds of SEO Issues in Seconds

Without Monthly Subscriptions

Comprehensive technical SEO analysis powered by ML and 16 specialized modules. Optional AI-powered insights from Claude, GPT-4, or Gemini. Get actionable insights in seconds, and never pay monthly fees again.

[Download Free Trial](https://www.blackseoanalyzer.com/en/free-trial)

I use AI to generate images for my posts and for general editing, updates, and ironically SEO purposes. I used to draw all of the images for my personal blog (taleas) myself, but as the volume of content I produce has increased, I've turned to AI tools to help create visuals that complement my writing. I go out of my way to generate images that look strange, and don't represent real people. If you ever want to chat about my use of AI, please reach out.

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://www.blackseoanalyzer.com/#organization","name":"Fiscus Technology, LLC","url":"https://www.blackseoanalyzer.com/","logo":{"@type":"ImageObject","url":"https://www.blackseoanalyzer.com/static/images/black-seo-analyzer.png"},"sameAs":["https://sethserver.com/","https://github.com/sethblack"],"founder":{"@id":"https://www.blackseoanalyzer.com/#seth"}},{"@type":"WebSite","@id":"https://www.blackseoanalyzer.com/#website","name":"bseoa","url":"https://www.blackseoanalyzer.com/","publisher":{"@id":"https://www.blackseoanalyzer.com/#organization"}},{"@type":"Person","@id":"https://www.blackseoanalyzer.com/#seth","name":"Seth Black","url":"https://www.blackseoanalyzer.com/about","jobTitle":"Creator of bseoa","sameAs":["https://www.linkedin.com/in/seth-black-tx/","https://github.com/sethblack","https://www.youtube.com/@SethBlack","https://sethserver.com/"]},{"@type":"BlogPosting","@id":"https://www.blackseoanalyzer.com/en/blog/which-pages-does-chatgpt-cite-server-logs#article","headline":"How to See Which Pages ChatGPT and Perplexity Cite From Your Site Using Server Logs","name":"How to See Which Pages ChatGPT and Perplexity Cite From Your Site Using Server Logs","description":"ChatGPT-User, Perplexity-User and Claude-User fetch pages for a person, so your logs hold a citation record. grep and SQL queries, the gaps, and our results.","url":"https://www.blackseoanalyzer.com/en/blog/which-pages-does-chatgpt-cite-server-logs","datePublished":"2026-11-01T05:21:23","dateModified":"2026-11-01T05:21:23","author":{"@id":"https://www.blackseoanalyzer.com/#seth"},"publisher":{"@id":"https://www.blackseoanalyzer.com/#organization"},"image":{"@type":"ImageObject","url":"https://www.blackseoanalyzer.com/static/images/black-seo-analyzer-og-image.png","width":1200,"height":630},"mainEntityOfPage":{"@type":"WebPage","@id":"https://www.blackseoanalyzer.com/en/blog/which-pages-does-chatgpt-cite-server-logs"},"isPartOf":{"@id":"https://www.blackseoanalyzer.com/#website"},"inLanguage":"en-US","isAccessibleForFree":true,"wordCount":1096},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://www.blackseoanalyzer.com/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://www.blackseoanalyzer.com/en/blog"},{"@type":"ListItem","position":3,"name":"How to See Which Pages ChatGPT and Perplexity Cite From Your Site Using Server Logs","item":"https://www.blackseoanalyzer.com/en/blog/which-pages-does-chatgpt-cite-server-logs"}]}]}
```
