TL;DR Google renders JavaScript, so content inside Elementor tabs and accordions is usually visible to it, as long as that content is in the page from the start. ChatGPT, Perplexity, and Claude are a different story. Their bots most likely do not run JavaScript, so they only see the raw HTML. The real problem is not CSS hiding. It is content that gets injected after the page loads, through AJAX, lazy loading, or dynamic sections. The simplest test is to compare "View Source" with the DOM after the page has rendered. An
llms.txtfile will not fix this.robots.txtis the control that actually matters. After you fix things, measure the result in Semly, because "it works" only counts once AI answers start citing you.
Can Google and ChatGPT Read Your Elementor Content? The Short Answer
Let's start with the good news. If you built a page in Elementor and you can see your text on the screen, there is a decent chance Google can see it too. Google renders JavaScript. That means it does not just grab the first version of your page. It also runs the scripts and looks at the result.
So a collapsed accordion is usually not a problem for Google. The text is sitting right there in the page. It is just hidden with CSS until someone clicks. Google reads it anyway.
ChatGPT, Perplexity, and Claude work differently. Their crawlers most likely do not run JavaScript at all. They read the raw HTML that comes back from your server. If your text is in that raw HTML, they can read it. If it only appears after a script runs, they probably never see it.
Here is the distinction that matters most:
- Content in the page, hidden with CSS. Usually fine. Google sees it, and AI bots can often read it too.
- Content injected later by JavaScript. Risky. Google may still catch it after rendering, but AI bots likely will not.
- Content loaded through AJAX or lazy loading. Risky for the same reason, and easy to miss.
A word of caution: no AI company has officially confirmed whether its bots render JavaScript. Treat "AI bots do not run JS" as a working assumption, not a proven fact. It is the safest way to build, but it is still an assumption.
So, do you need to change anything? Only if your key text is missing from the raw HTML. The next sections show you how to check.
What Each Crawler Actually Sees (Google vs. AI Bots)
Think of it as two different readers looking at the same page.
Google goes through three phases: crawl, render, then index. It first grabs the raw HTML. Then it puts the page in a queue and renders it with a headless browser. Only after that does it index what it found. That queue can take a while, so a brand new page might not be fully understood right away.
AI bots skip most of that. They fetch the page and read what comes back. No browser, no scripts, no waiting.
| Bot | Renders JavaScript? | What it sees |
|---|---|---|
| Googlebot | Yes | Raw HTML, then the rendered page |
| Google-Extended | Uses Google's rendering setup | Content for Gemini training and grounding |
| GPTBot (OpenAI) | No documented rendering | Raw HTML only |
| OAI-SearchBot (OpenAI) | No documented rendering | Raw HTML only |
| ChatGPT-User | No documented rendering | Raw HTML only |
| ClaudeBot (Anthropic) | No documented rendering | Raw HTML only |
| PerplexityBot | No documented rendering | Raw HTML only |
A few notes on that table. Gemini is the odd one out, because it leans on Google's infrastructure, which does render. The rest of the AI bots do not publish any rendering pipeline, so the safe bet is to assume they read raw HTML only.
Also worth knowing: this data comes from outside measurements and vendor documentation, and it can change. Crawler behaviour is not set in stone. Check it again from time to time.
How Elementor Handles Tabs, Accordions, and Dynamic Sections
Here is the part that surprises most people. Elementor is a WordPress page builder, and WordPress builds pages on the server. Your widget text is stored in the database and printed into the HTML before the page ever reaches a browser.
That means your tab and accordion content is usually in the raw HTML from the start. The inactive panels are hidden with CSS, not deleted. They are still there in the code.
A few Elementor details worth knowing:
- The accordion opens its first item on page load. The rest stay collapsed.
- The accordion has a Title HTML Tag setting, so you can make your question a real heading instead of a plain div.
- It also has an FAQ Schema toggle, which can help your questions show up in rich results.
- On mobile, tabs turn into a vertical, accordion-style layout at a set breakpoint.
Now the three cases where things actually go wrong:
- Lazy loading. Elementor can delay loading images and background images until they scroll into view. Elementor's own documentation warns this may affect search rankings because unloaded content can be indexed incorrectly.
- Content pulled in by plugins or dynamic tags. Some add-ons and dynamic tags fetch their content with AJAX after the page loads. That content is not in the raw HTML.
- Anything injected by JavaScript after load. If a script adds your text later, non-rendering bots never see it.
One honest note: Elementor's documentation describes settings, not the exact markup. The precise CSS classes and how collapsed panels behave can differ between versions and add-ons. Open View Source on your own page and check. Do not take anyone's word for it, including ours.
Step-by-Step: How to Check What Google and AI Bots See
This is the part you can do today. Grab a coffee and work through it in order.
1. Pick your test page and a test phrase. Choose a specific page and copy one sentence from inside a tab or accordion. Something unique, like the first line of a hidden panel. This is your reference point.
2. Open View Source (Ctrl+U or Cmd+U) and search for that phrase. This shows the raw HTML your server sent. If your sentence is there, bots that do not run JavaScript can read it. If you only see an empty shell, your content is being injected later.
3. Open DevTools, go to the Elements panel, and compare. This shows the DOM after JavaScript has run. Anything that appears here but not in View Source was added by a script. That is the gap where AI bots lose your content.
4. Use Search Console, URL Inspection, Test Live URL. Click "View tested page" and open the HTML tab. This shows what Google renders. One caveat: this test uses Google-InspectionTool, not Googlebot itself, and it does not check canonical tags or your sitemap. It is a strong proxy, not the real thing.
5. Run a curl command with a bot user-agent.
Something like curl -A "GPTBot" https://your-site.com/page | grep "your phrase". If nothing comes back, that bot will not see your content either.
6. Run the Rich Results Test. If you turned on FAQ Schema in your accordion, check that it is actually detected. This confirms your structured data is readable.
7. Check your server logs. Look for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, and PerplexityBot. Verify them by IP address, not just by user-agent, because user-agents can be faked.
Typical symptoms and what they mean:
- Phrase in Elements but not in View Source: your content depends on JavaScript.
- Phrase missing everywhere: a plugin or AJAX call is the culprit.
- Phrase in View Source but never cited: the content is readable, but not compelling or not being picked up. That is a different problem.
Common Mistakes and How to Fix Them
Most people lose time on the same handful of issues. Here they are, with the fix.
"Hidden means invisible." You panic before testing anything. Fix: run the View Source versus DOM check first. You will often find your content was fine all along.
Key content lives only in JavaScript. Symptom: your text is nowhere in the raw HTML. Fix: move important copy into the widget's own content fields so it is rendered on the server, and cut back on AJAX for anything that matters.
Lazy loading on important images or text. Symptom: Elementor itself warns about indexing risk. Fix: turn lazy loading off for your most important elements, especially above-the-fold images and hero sections.
Counting on llms.txt.
Symptom: you set it up and nothing changes. Fix: accept that AI crawlers barely request it. A log audit of a thousand domains found that GoogleBotDesktop made up the vast majority of llms.txt hits, with zero requests from GPTBot, ClaudeBot, or PerplexityBot. Keep robots.txt as your real control.
Ignoring the mobile version. Symptom: tabs look different on a phone. Fix: check whether the breakpoint changes the actual DOM or just the styling. If it changes the DOM, your mobile content may differ from what desktop crawlers see.
Forgetting that readable is not the same as cited. Symptom: your content is in the HTML, but AI answers never mention you. Fix: this is where measurement comes in, and that is the next step.
What to Do Next
Once you have run the tests, you have a short list of fixes. Here is the order that works best.
- Fix, then test again. Change one thing at a time and re-run the View Source check. Confirm the content is now in the raw HTML.
- Add FAQ Schema to question-style accordions. If your accordion holds real questions, turning on the schema toggle gives you a second chance at visibility in rich results.
- Consider server-side rendering for critical content. If a piece of text really matters, it should be in the HTML from the start. That is the safest path for every crawler, rendering or not.
- Test prompts in ChatGPT, Gemini, and Perplexity. Write down a handful of questions your customers would ask. Run them, and note whether your brand comes up and whether your domain is cited.
- Watch your bot logs over time. A single check is a snapshot. Patterns over weeks tell you which pages AI bots actually value.
This is where Semly fits in. Semly is built for exactly this last step: measuring how your brand shows up in AI answers. It analyzes prompts, sources, competitors, and generated responses, so you can see whether AI systems are recommending you or your competitors. You can also check which bots are visiting your site and whether your content is being cited. If you want a quick starting point, Semly offers a free AI visibility report.
The loop is simple. Fix the page, then measure the result. A fix you cannot confirm is just a guess. Once you can see your content in the raw HTML and your brand in AI answers, you know the work paid off.