PerplexityBot and Perplexity-User: how Perplexity reaches your site
PerplexityBot indexes pages for Perplexity search; Perplexity-User fetches pages on request. How to allow, block and verify each, and what blocking changes.
By Crawlito · 8 min read
In short
- PerplexityBot crawls pages to surface and link them in Perplexity search results, and Perplexity says it is not used to crawl content for AI foundation models.
- Perplexity-User fetches a page when a Perplexity user's question needs it, and Perplexity says it generally ignores robots.txt because a user requested the fetch.
- robots.txt controls PerplexityBot; Perplexity says changes may take up to 24 hours to show in its systems.
- Perplexity publishes separate IP lists for each agent at perplexity.ai/perplexitybot.json and perplexity.ai/perplexity-user.json, and recommends matching both user agent and IP.
- Cloudflare Bot Fight Mode cannot be skipped with WAF custom rules, so it can challenge Perplexity's bots even when you add a skip rule for them.
On this page
- PerplexityBot vs Perplexity-User at a glance
- What PerplexityBot does
- What Perplexity-User does, and why robots.txt may not stop it
- How to allow PerplexityBot in robots.txt
- How to block PerplexityBot, and what blocking changes
- How to verify that a request really comes from Perplexity
- How to let Perplexity through a WAF or Cloudflare
- Frequently asked questions
- Check what Perplexity sees on your site
Perplexity reaches your site through two documented agents. PerplexityBot crawls ahead of time so Perplexity can surface and link your pages in its search results, and Perplexity tells site owners to manage it with robots.txt. Perplexity-User visits a page only when a person's question needs it, and Perplexity says it generally ignores robots.txt for those fetches. If you want to appear in Perplexity's search results, allow PerplexityBot in robots.txt and make sure your firewall lets its published IP addresses through.
This guide covers what each agent does, how to allow or block them, how to verify that a request claiming to be Perplexity is real, and what blocking actually changes. Everything here is based on Perplexity's crawler documentation, read on 8 November 2026. The page shows no last-updated date, so check it again before you change anything important.
PerplexityBot vs Perplexity-User at a glance
The two agents have different jobs, and they respond to different controls.
| PerplexityBot | Perplexity-User | |
|---|---|---|
| Purpose | Surfaces and links websites in Perplexity search results | Supports user actions: visits a page to answer a question and link to it |
| Type | Search crawler | User-triggered fetcher |
| Used for model training? | Perplexity says no | Perplexity says no |
| Controlled by robots.txt? | Yes, per Perplexity's guidance | Perplexity says it "generally ignores robots.txt rules" |
| User-agent token | PerplexityBot | Perplexity-User |
| Published IPs | perplexitybot.json | perplexity-user.json |
The full user-agent strings, as documented, are:
Mozilla/5.0 (compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)
Mozilla/5.0 (compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)Match on the token (PerplexityBot, Perplexity-User) rather than the whole string: Perplexity labels these as example strings and says the version number may change. This split between search crawlers, training crawlers and user-triggered fetchers applies across every AI operator; training, search and user-triggered crawlers explains why it matters for your robots.txt.
Note that the "not used for training" statements are Perplexity's own description of its agents. They are not something an outside party can verify from server logs.
What PerplexityBot does
PerplexityBot is the crawler that builds Perplexity's picture of the web before anyone asks a question. Perplexity describes it as designed "to surface and link websites in search results on Perplexity" and says it is not used to crawl content for AI foundation models.
Perplexity's advice is direct: to make sure your site appears in its search results, it recommends allowing PerplexityBot in robots.txt and permitting requests from its published IP ranges. Both parts matter. A correct robots.txt does nothing if a firewall rule returns a challenge page to the crawler's IP address.
Like most AI crawlers, PerplexityBot reads the HTML your server sends. In Vercel's December 2024 analysis, PerplexityBot made about 24.4 million fetches in the month measured and did not render JavaScript. That is a snapshot from 2024, not a documented guarantee, but it is a good reason to keep your main text in the server-rendered HTML. See do AI crawlers run JavaScript? for how to check.
What Perplexity-User does, and why robots.txt may not stop it
Perplexity-User is not a crawler in the usual sense. Perplexity says it supports user actions: when someone asks Perplexity a question, it may visit a web page to help answer it and link to that page in the response. Perplexity also says it is not used for web crawling or to collect content for training AI foundation models.
The important line for site owners is this one, from Perplexity's documentation: since a user requested the fetch, this fetcher "generally ignores robots.txt rules." The same entry also says Perplexity-User "controls which sites these user requests can access", which sits awkwardly next to that line, so treat any robots.txt rule for it as a request rather than a block.
So a robots.txt group like the one below is not an effective block, and you should not rely on it:
User-agent: Perplexity-User
Disallow: /This is a common pattern among user-triggered agents. OpenAI says robots.txt rules "may not apply" to ChatGPT-User, and Meta says its Meta-ExternalFetcher may bypass robots.txt. Anthropic is an exception: it says its three bots, including Claude-User, honor robots.txt.
If you need to stop Perplexity-User, the only reliable tool is your server, CDN or WAF: refuse requests that match both its user agent and its published IPs. Before you do, consider the trade-off. When a user asks Perplexity about one of your pages, or pastes your URL, Perplexity can no longer fetch the live page to answer that question.
How to allow PerplexityBot in robots.txt
Add a group that names PerplexityBot. Under RFC 9309, a crawler obeys the group that names it and ignores the * group, so a named group overrides any blanket rule.
User-agent: PerplexityBot
Allow: /
Disallow: /account/
Disallow: /cart/
User-agent: *
Disallow: /account/
Disallow: /cart/Two details catch people out:
- Repeat your private-path rules inside the named group. Because PerplexityBot ignores
*once it has its own group, theDisallow: /account/line in*no longer applies to it. How robots.txt groups work walks through this in detail. - Check for a blanket block with no named group. If your file has
User-agent: *withDisallow: /and no PerplexityBot group, PerplexityBot is blocked.
Then confirm the file is served correctly:
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/robots.txt
curl -s https://example.com/robots.txt | grep -i -A3 "perplexity"A 200 with the rules you expect is what you want. Under RFC 9309, a 5xx or unreachable robots.txt tells a compliant crawler to assume everything is disallowed. Perplexity says changes may take up to 24 hours to show in its systems, so do not expect an immediate effect.
How to block PerplexityBot, and what blocking changes
To opt out of Perplexity's search crawler entirely:
User-agent: PerplexityBot
Disallow: /Here is what that does and does not do, based on what Perplexity documents:
- It stops PerplexityBot crawling your site, once the change is picked up (up to 24 hours).
- It works against what Perplexity says you need for its search results. Perplexity's guidance for appearing in results is to allow PerplexityBot. Perplexity does not publish exactly how a blocked site is treated in answers, so expect to be less visible rather than assuming a precise outcome.
- It does not block Perplexity-User. Perplexity says Perplexity-User generally ignores robots.txt, so a user's request can still lead to a fetch of a specific page.
- It is not a training opt-out, because Perplexity says PerplexityBot is not used for training in the first place. If your goal is to keep content out of model training, the agents that matter are tokens like GPTBot, ClaudeBot, CCBot, Google-Extended and Applebot-Extended. How to allow AI search but block AI training covers that setup.
Perplexity also says each of its robots.txt settings works independently, so a rule for PerplexityBot applies to PerplexityBot only. It does not change anything for Perplexity-User, which generally ignores robots.txt anyway.
How to verify that a request really comes from Perplexity
Anyone can send a request with PerplexityBot in the user agent. Perplexity's guidance is to combine user-agent matching with IP verification, and to match each agent against its own list rather than one shared list.
Both lists are JSON with a creationTime field and a prefixes array of ipv4Prefix entries. When fetched on 8 November 2026, both showed a creationTime of 28 October 2026. The addresses change, so fetch the files on a schedule rather than copying them into your config by hand.
First, find the requests in your access log and count source IPs:
grep -E "PerplexityBot|Perplexity-User" /var/log/nginx/access.log \
| awk '{print $1}' | sort | uniq -c | sort -rn | headNext, download the current list for the agent you are checking:
curl -s https://www.perplexity.ai/perplexitybot.json \
| jq -r '.prefixes[].ipv4Prefix' > perplexitybot-ips.txtThen test an IP from your logs against it:
python3 - 203.0.113.7 perplexitybot-ips.txt <<'EOF'
import ipaddress, sys
ip = ipaddress.ip_address(sys.argv[1])
nets = [ipaddress.ip_network(l.strip()) for l in open(sys.argv[2]) if l.strip()]
print("matches published range" if any(ip in n for n in nets) else "NOT in published range")
EOFA request with the PerplexityBot user agent from an IP outside the list is not PerplexityBot, whatever it claims. Repeat the check with perplexity-user.json for Perplexity-User requests. For the same method across other operators, see how to verify a real AI crawler.
How to let Perplexity through a WAF or Cloudflare
If you run a WAF, Perplexity says you may need to allow its bots explicitly. Its recommendations:
- Match each agent's user agent and that agent's own IP ranges, never one shared list.
- Use the official JSON files as the source of truth and update your rules automatically.
- Place the allow or skip rule above any rules that block or challenge requests.
- Watch your logs after a change, since WAF updates can take time to propagate.
On Cloudflare, Perplexity's example is one custom rule (Security, then Security rules, then Create rule, then Custom rules) with this expression:
(http.user_agent contains "PerplexityBot" and ip.src in {<PerplexityBot IP ranges>})
or (http.user_agent contains "Perplexity-User" and ip.src in {<Perplexity-User IP ranges>})Replace each placeholder with the current prefixes from the matching JSON file, separated by spaces, and set the action to Skip for the features those requests should bypass, such as remaining custom rules, managed rules, rate limiting rules or Super Bot Fight Mode rules. A Skip rule only bypasses rules that run after it. On paid plans you can store each agent's ranges in an IP list and update the list instead of the rule; Perplexity notes that free plans allow only one custom list, which is not enough for both agents. If you only want the search crawler, drop the second clause. On AWS WAF, the equivalent is one IP set per agent and an Allow rule per agent that combines the IP set match with a User-Agent string match, with a lower priority number than your blocking rules.
One limit to know: Perplexity notes that Cloudflare Bot Fight Mode cannot be skipped with WAF custom rules. Cloudflare's own documentation says the same, because Bot Fight Mode does not run on the Ruleset Engine. If Bot Fight Mode is on, it can still challenge Perplexity's bots no matter what custom rule you add. Cloudflare also has AI-specific policies that set actions for search, agent and training bots; Cloudflare and AI crawlers covers where those settings live.
Frequently asked questions
Does PerplexityBot use my content to train AI models?
Perplexity says no. Its documentation states that PerplexityBot surfaces and links websites in search results and is not used to crawl content for AI foundation models. That is Perplexity's own statement, not something you can verify from your logs.
Can I block Perplexity-User with robots.txt?
Not reliably. Perplexity says Perplexity-User generally ignores robots.txt rules because a user requested the fetch. To block it, deny requests that match its user agent and its published IPs at your server, CDN or WAF.
How long does a robots.txt change take to affect Perplexity?
Perplexity says it may take up to 24 hours for its systems to reflect changes. Check your server logs after a day to confirm PerplexityBot's behaviour has changed.
If I allow PerplexityBot, will Perplexity cite my site?
Not necessarily. Allowing PerplexityBot and its IP ranges removes a technical barrier and is what Perplexity recommends for appearing in its results. Which sources Perplexity chooses for an answer depends on many things outside your site.
Where are Perplexity's IP addresses published?
PerplexityBot's ranges are at https://www.perplexity.ai/perplexitybot.json and Perplexity-User's are at https://www.perplexity.ai/perplexity-user.json. Fetch them automatically, because the lists change.
Check what Perplexity sees on your site
The commands above check the robots.txt rule, the status code and the published IPs by hand. To check one page in one go, run the free check, which needs no account. If you need the whole site reviewed, the full audit covers up to 500 pages and ends with a PDF of evidence and prioritized fixes.
Filed under AI crawlers. Topics: perplexity, ai-crawlers, robots-txt, waf, server-logs