Platform guide
WordPress
The plugins do the structured data well. The failures are usually the theme, the robots file, and a page builder hiding your content.
If you run Yoast or Rank Math, most of the first pillar is already handled — Organization, Article and breadcrumb schema get emitted for you. The remaining gaps are consistent across almost every WordPress site we check.
Gap 1 — A security plugin blocking crawlers
Wordfence, iThemes and similar tools sometimes block unfamiliar user-agents by default. Check the blocked-agents list for GPTBot, ClaudeBot and PerplexityBot before anything else. This is the single most common cause of a genuinely invisible WordPress site.
Gap 2 — robots.txt
WordPress serves a virtual robots.txt unless you create a real one. Yoast lets you edit it under Yoast SEO → Tools → File editor. Or filter it:
add_filter('robots_txt', function ($output) {
$extra = "\nUser-agent: GPTBot\nAllow: /\n";
$extra .= "\nUser-agent: OAI-SearchBot\nAllow: /\n";
$extra .= "\nUser-agent: ClaudeBot\nAllow: /\n";
$extra .= "\nUser-agent: PerplexityBot\nAllow: /\n";
return $output . $extra;
}, 10, 1);Gap 3 — Page builder content that is not in the HTML
Elementor and Divi tab, accordion and toggle widgets frequently render their content only on interaction. View source on a page with tabs. If the hidden panel text is not in the raw HTML, that content does not exist to a crawler. Replace with plain headings and paragraphs on your most important pages.
Gap 4 — FAQ schema
Yoast and Rank Math both ship an FAQ block for the block editor that emits FAQPage schema and renders visible text. Use it rather than hand-writing JSON-LD — it keeps the markup and the visible content in sync automatically.
Block editor → Add block → search "FAQ".
Gap 5 — Alt text
Media → Library → List view shows alt text per item. Fix in bulk, oldest first — legacy uploads are almost always the offenders.
Gap 6 — llms.txt
Add a rewrite rule so a plain text file serves at the root:
add_action('init', function () {
add_rewrite_rule('^llms\.txt$', 'index.php?llms_txt=1', 'top');
});
add_filter('query_vars', function ($v) { $v[] = 'llms_txt'; return $v; });
add_action('template_redirect', function () {
if (!get_query_var('llms_txt')) return;
header('Content-Type: text/plain; charset=utf-8');
echo file_get_contents(get_stylesheet_directory() . '/llms.txt');
exit;
});Put llms.txt in your child theme folder and flush permalinks once.
Check the security plugin first. Everything else is wasted if the crawler never gets in.
Common questions
Do I need Yoast and a separate schema plugin?
No, and running two schema plugins usually produces conflicting duplicate blocks. Pick one.
Does Elementor hurt AI visibility?
Not inherently. The risk is specific widgets — tabs, accordions, toggles — that render content only on interaction. Check view-source on your key pages.
Take this to your assistant
Paste it into ChatGPT, Copilot, Claude or Gemini and apply it to your own website.
Nothing is sent anywhere. The text is copied to your clipboard.