Meta-ExternalFetcher: Robots.txt & Crawl Policy Reference
Guide to Meta-ExternalFetcher, Meta's user-triggered AI assistant crawler. Understand its behavior and robots.txt compliance.
AI Summary: Meta-ExternalFetcher is a user-triggered crawler that fetches individual web pages when a user interacts with Meta AI (e.g., on WhatsApp, Instagram, or Facebook) and asks it to summarize or read a specific link.
Role and policy boundary
Unlike background training crawlers, Meta-ExternalFetcher acts as an agent for a human user. When a user pastes your URL into a Meta AI chat, this fetcher visits the page in real-time to read the content. Meta's documentation notes that because it performs fetches initiated by a user, it may bypass standard robots.txt rules.
A robots rule is a declaration of intent; it does not replace authentication, authorization, or rate limiting. Start with a dedicated group:
User-agent: Meta-ExternalFetcher
Allow: /
Disallow: /staging/
Disallow: /internal/
To stop access for the entire site, use:
User-agent: Meta-ExternalFetcher
Disallow: /
Avoid assuming that User-agent: * expresses the same business intent. A wildcard can affect assistant and training crawlers too, and it makes later audits harder because the source of the decision is less specific.
Layered verification
Verify the same URL through each control plane instead of assuming that one green signal represents the whole request path. Compare the bot-specific robots group, the page-level metadata, and the response headers captured at the public edge.
Because Meta-ExternalFetcher is designed to act on behalf of a user's direct request, relying solely on robots.txt may be insufficient if Meta decides the user's intent overrides the site's general policy. To strictly control access, you must evaluate the User-Agent at the application or network layer.
The Policy Engine evaluates the selected user-agent, path scope, and the other supplied layers independently. It can therefore explain why a bot is allowed while another is blocked, rather than returning one blended website score.
Page-level directives can still override the intended outcome for indexing:
<meta name="robots" content="noai, noimageai">
X-Robots-Tag: noai, noimageai
If a response uses these tags, the report marks the result as blocked or conflicting even if the crawler-specific robots group is permissive. This is especially important for canonical pages served through an edge cache where headers may differ from the origin response.
WAF and Nginx remediation examples
If you need to prevent Meta AI from reading your content even when a user explicitly requests it, implement a network-level block:
{
"description": "Block Meta AI User Fetcher",
"expression": "lower(http.user_agent) contains \"meta-externalfetcher\"",
"action": "block"
}
Use your platform's actual middleware response pattern rather than copying this simplified example without review. Never place a secret, verification token, or internal policy identifier in a public response header.
map $http_user_agent $block_meta_externalfetcher_private {
default 0;
~*meta-externalfetcher 1;
}
server {
location ~ ^/(admin|account|private|licensed|internal|api)/ {
if ($block_meta_externalfetcher_private) { return 403; }
try_files $uri $uri/ =404;
}
}
Review checklist
Use this checklist after every policy change and after a CDN or WAF migration. Record the request URL, User-Agent, HTTP status, final redirect, and the exact evidence used to reach the decision.
Verify that the dedicated group appears before relying on a wildcard, test a representative public and private path, and compare live response headers with robots.txt. Keep the policy close to the content owner's intent and record whether the site wants discovery, citation, or no access at all.
Need to optimize your entire site for AI search visibility? Run a comprehensive audit with Geolify.ai.