Perplexity is growing fast as an AI search engine, and it cites sources prominently, with links. That makes it an interesting channel to be mentioned in. But how Perplexity reads your site determines whether you can be cited at all, and that depends on something technical many people overlook. Perplexity reads your page very differently from a human.
In this article I walk you through how Perplexity fetches and processes content, and which HTML patterns work best. I do this work in GEO audits under JSResults, and this is exactly where I see sites unintentionally make themselves invisible. A shame, because it is easy to prevent.
Two bots: PerplexityBot and Perplexity-User
Perplexity uses two kinds of access to the web, and it helps to know the difference.
PerplexityBot. This is the crawler that scours the web and builds its own index of content useful for answering questions. You recognise it in your server logs by the user agent ‘PerplexityBot’.
Perplexity-User. This is the fetcher that springs into action the moment a user asks a question and Perplexity wants to look at a page live.
The same important point applies to both, and that is the heart of this article.
The most important lesson: Perplexity does not render JavaScript
This is the point that decides everything. PerplexityBot does not execute JavaScript. It fetches the raw HTML, takes what it finds, and moves on. It does not wait for your page to be built up in the browser, and it does not try a second time.
The consequence is big. If your content is only built in the browser with JavaScript, for example in a React, Vue or Angular app that renders everything client-side, Perplexity often sees an empty or nearly empty page. To a visitor it looks perfect, but for Perplexity there is nothing there. And what is not there cannot be cited.
Nothing to cite.
What does get read is everything already in the first HTML: server-side rendered content, text that sits in the source code right away, and data sent along as inline JSON or structured data in your HTML. Whatever the browser only builds after loading, it misses.
What this means for your structure
The conclusion is simple: your important content must be in the HTML the server returns immediately. Not something that only appears after loading.
- Use server-side rendering or static generation for your important pages. Then your content is already in the source code. Frameworks such as Astro, Next.js and Nuxt can do this.
- Put your core message and answers in plain HTML text, not in a widget that only fetches content through JavaScript.
- Check what is in your raw HTML. Turn JavaScript off in your browser, or view the source. Don’t see your content? Then Perplexity doesn’t see it either.
I practise this on my own site: it runs on Astro and serves the content server-side, precisely so AI crawlers see everything right away. Practice what you preach.
Crawl budget: keep important content shallow
One more thing to account for. PerplexityBot appears to be more frugal with crawling than Googlebot. It prioritises certain pages and does not always dive deep into your site. That means:
- Keep your most important pages close to the homepage, with few clicks in between.
- Make sure you have a clear internal link structure, so the crawler finds your important content easily.
- Don’t bury your best content deep in folders or behind many navigation layers.
HTML patterns that work best
Alongside server-side rendering, these patterns help Perplexity extract and cite your content cleanly.
- Semantic HTML. Use real headings (h1, h2, h3), paragraphs, lists and tables. Give the crawler structure, not a soup of divs.
- Answer first. Put the short answer right under each heading, then the explanation. That is exactly the piece Perplexity likes to take as a source. This ties into how AI picks sources.
- Self-contained passages. Write paragraphs that can be understood on their own, without the rest of the page. Easier to lift out.
- Structured data and inline data. Schema and data already present in the HTML get read and help with understanding.
- A clean main body. Keep your important text away from clutter, pop-ups and heavy navigation, so the core is clear.
- Fast, accessible pages. What reads well for people and search engines does so for Perplexity too. More on that in my article on fast, accessible pages.
What to avoid
- Fully client-side rendered pages, where the content only appears in the browser. The biggest pitfall.
- Important text that only loads on scroll or click, for example in tabs or accordions that fetch content through JavaScript.
- Putting core information in images without also offering it as text. A crawler doesn’t read text in a picture.
- Blocking PerplexityBot in your robots.txt while you actually want to be cited. Check that it has access.
Practical checklist
- Turn JavaScript off in your browser and open your most important pages. Is your content still there? If not, fix that first.
- Make sure those pages are rendered server-side or statically.
- Check your heading structure and put the answer at the top of every section.
- Keep important pages shallow and well linked internally.
- Check in robots.txt that PerplexityBot and Perplexity-User have access.
Frequently asked questions
Does Perplexity render JavaScript?
No. PerplexityBot fetches the raw HTML and does not execute JavaScript. Content that is only built up in the browser often stays invisible to it. So make sure your important content is already in the HTML.
What is the difference between PerplexityBot and Perplexity-User?
PerplexityBot is the crawler that builds its own index. Perplexity-User is the fetcher that looks at a page live when a user asks a question. Both read the raw HTML.
Why doesn’t Perplexity cite my site?
A common reason is that your content only appears through JavaScript in the browser, so Perplexity sees an empty page. Other reasons: your content is buried deep, poorly structured, or PerplexityBot is blocked in robots.txt.
Which framework is good for AI visibility?
Any framework that does server-side rendering or static generation, such as Astro, Next.js or Nuxt. It is not about which framework, but that your content is already in the HTML the server returns.
Sources
This article combines my own audit practice with publicly verified information on how AI crawlers work. I checked the facts about JavaScript rendering and PerplexityBot against several technical sources from 2026, including analyses of how AI crawlers handle client-side rendered pages, and Perplexity’s documentation on its crawlers.
Want to know whether Perplexity and other AI crawlers can actually read your content? In a GEO audit I check exactly that, and deliver a concrete action plan. Book a call.