TL;DR, Respuesta Rápida
9 min de lecturafacebookexternalhit es el rastreador que Meta envía cuando alguien comparte un enlace en Facebook, Instagram o Messenger, y descarga tu página para construir la tarjeta de vista previa. Meta documenta dos cadenas UA para él, otros cuatro rastreadores de Meta junto a él y una lista corta de requisitos de servidor que incluye gzip y deflate, etiquetas Open Graph dentro del primer 1 MB y tolerancia a una cabecera Range. Meta dice que la opción más segura es incluir el rastreador en una lista blanca por IP y luego enlaza ese consejo a un ancla de su propia página que no contiene ninguna lista de IP.
¿Qué es facebookexternalhit?
Meta envía facebookexternalhit cuando alguien comparte un enlace a tu sitio en una de sus aplicaciones, y el rastreador descarga la página para que Meta pueda construir la tarjeta de vista previa. La documentación Meta Web Crawlers lo dice sin rodeos: el propósito principal "is to crawl the content of an app or website that was shared on one of Meta's family of apps, such as Facebook, Instagram, or Messenger." La misma página añade que el rastreador "gathers, caches, and displays information about the app or website such as its title, description, and thumbnail image."
El enlace no tiene que llegar desde un botón de compartir. Meta dice que el enlace "might have been shared by copying and pasting or by using the Facebook social plugin", así que una URL escrita en un hilo de Messenger dispara la misma descarga que una publicación pública.
¿Qué cadenas de user agent envía facebookexternalhit?
Meta documenta dos, y ambas empiezan por el mismo token en minúsculas. La página dice que la cadena UA en tus archivos de registro "will be similar to one of the following":
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1Fíjate en el desajuste entre el texto y lo que viaja por el cable. Los encabezados y el cuerpo de Meta escriben el rastreador como FacebookExternalHit en camel case, mientras que la cadena que recibe tu servidor va en minúsculas. Compara por subcadena sin distinguir mayúsculas, no contra la escritura en camel case.
Meta también publica la petición exacta que debes repetir cuando quieras reproducir lo que ve el rastreador:
curl -v --compressed -H "Range: bytes=0-524288" -H "Connection: close" \
-A "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" "$URL"¿En qué se diferencia facebookexternalhit de meta-externalagent?
Son user agents distintos con propósitos distintos, y una regla de robots.txt contra uno no toca al otro. Meta ya documenta cinco rastreadores en la misma página, y esa separación es la que importa si quieres eliminar el tráfico de entrenamiento de IA sin perder tus vistas previas.
| Rastreador | Token de user agent | Propósito que declara Meta |
|---|---|---|
| FacebookExternalHit | facebookexternalhit/1.1 | Rastrea contenido compartido en la familia de apps de Meta y construye la vista previa |
| Meta-WebIndexer | meta-webindexer/1.1 | Navega la web para mejorar la calidad de los resultados de búsqueda de Meta AI |
| Meta-ExternalAds | meta-externalads/1.1 | Rastrea para publicidad y otros productos y servicios de negocio |
| Meta-ExternalAgent | meta-externalagent/1.1 | Entrena modelos fundacionales de IA o mejora productos indexando contenido directamente |
| Meta-ExternalFetcher | meta-externalfetcher/1.1 | Descarga enlaces sueltos a petición de una persona, dando soporte a la IA agéntica |
Bloquear meta-externalagent no te cuesta nada en el feed, porque la tarjeta de vista previa la construye otro rastreador. El propio ejemplo de robots.txt de Meta usa meta-externalagent como agente de muestra:
User-agent: meta-externalagent
Allow: / # Allow everything
Disallow: /private/ # Disallow a specific directoryMeta no publica ninguna fecha de cuándo se separaron los rastreadores de IA de facebookexternalhit. La página lleva una sola línea "Updated: May 21, 2026" y ningún historial de revisiones, así que la separación queda documentada como un hecho del presente, sin un antes y un después que comprobar.

¿Qué exige Meta de tu servidor?
Cinco requisitos, todos listados bajo Crawler Requirements, y cuatro de ellos se incumplen con facilidad sin enterarte. Tu servidor "must use gzip and deflate encodings." Las propiedades Open Graph "need to be listed before the first 1 MB of your website or app, or it will be cutoff." El contenido tiene que ser rastreable "within a few seconds or Facebook will be unable to display the content."
El cuarto es el que tumba a los servidores que entienden de rangos. Meta dice que tu aplicación o sitio "should either generate and return a response with all required properties according to the bytes specified in the Range header of the crawler request or it should ignore the Range header altogether." Un servidor que respeta Range: bytes=0-524288 pero coloca el <head> más allá de ese límite devuelve una respuesta técnicamente correcta sin nada que analizar. El quinto es la lista blanca, que se trata más abajo.
Nada de esto tiene que ver con lo que dicen tus etiquetas, solo con si el rastreador llega a ellas. El contenido de las etiquetas es otro problema, y el conjunto completo de propiedades que leen Meta y cualquier otra red está en esta guía de etiquetas Open Graph.
¿Cómo distingues una petición real de facebookexternalhit de una falsa?
Por la IP, porque la cadena de user agent es una cabecera de texto libre que puede enviar cualquiera. Meta coincide y recomienda incluir en una lista blanca "either the user agent strings or the IP addresses (more secure) used by the crawler."
Y ahí se acaba la documentación. Esa frase enlaza a un ancla llamada identify, y la página en vivo no tiene ninguna sección de direcciones IP. En el código fuente de la página, la misma ancla identify está asociada a cuatro encabezados distintos, incluido el de robots.txt. Meta te dice cuál es la opción más segura y luego apunta a la nada.
El comando sí está publicado, en una página que no viene a cuento. La documentación de los webhooks de WhatsApp de Meta da la consulta para las propias rutas de Meta:
AdaptlyPost
Prueba gratis de 7 días
Analíticas multiplataforma
Bandeja Social
Asistente con IA
whois -h whois.radb.net -- '-i origin AS32934' | grep '^route' | awk '{print $2}' | sortEse número de sistema autónomo cuadra. El registro de ARIN lista AS32934 como ASName: FACEBOOK, registrado el 24 de agosto de 2004. Ejecuta la consulta tú mismo y obtienes el conjunto actual de objetos de ruta: el 12 de septiembre de 2026 devolvió 416 prefijos IPv4 únicos y 633 prefijos IPv6 únicos, desde 102.132.100.0/24 hasta bloques como 2401:db00::/32. La advertencia de Meta viaja con el comando, porque la página de WhatsApp avisa de que "Meta periodically changes its IP addresses." Una comprobación de DNS inverso sobre la dirección que hace la petición es la alternativa más barata para la mayoría de sitios.
¿Puedes bloquear facebookexternalhit en robots.txt?
Puedes, y Meta dice que el bloqueo no siempre aguantará. La documentación afirma que "the FacebookExternalHit crawler might bypass robots.txt when performing security or integrity checks, such as checking for malware or malicious content." Meta-ExternalFetcher lleva la misma excepción porque descarga enlaces que ha pedido una persona.
Meta también pide paciencia con la regla en sí: "Please allow up to 24 hours for changes to robots.txt to take effect because crawlers may cache the contents of robots.txt for up to 24 hours." Un disallow que añadiste esta mañana no explica un rastreo de esta tarde.
Bloquear el rastreador mata la vista previa. El enlace se sigue publicando, solo que llega como una URL pelada sin tarjeta, que es el mismo resultado visual que una etiqueta rota. El clic posterior pasa igualmente por la capa de redirección de Meta, un salto aparte con sus propios efectos sobre tu analítica y que se desglosa en este análisis de el shim de enlaces l.facebook.com.
¿Por qué el rastreador devuelve código 0 o una vista previa en blanco?
Por un registro DNS en el que casi ningún sitio piensa. Las FAQ de Link Sharing de Meta lo dicen sin matices: "The crawler will look for a AAAA record and return a response code 0 if it is not found." Un host solo con IPv4 que funciona en cualquier navegador puede no devolver nada a facebookexternalhit.
Otros tres modos de fallo salen de esas mismas FAQ. Las imágenes se guardan "cached asynchronously, so the image may not render the first time someone shares your content", y el remedio de Meta es cachear por adelantado lanzando un scrape con el Sharing Debugger en /tools/debug/. Una imagen que aparece como un recuadro blanco está "no longer available, is too big or could not be fetched", y el techo son 8 MB. Una imagen de entre 200 x 200 y 600 x 315 píxeles se muestra como un cuadrado pequeño en vez de como una tarjeta.
El último es permanente. Una vez compartido un enlace, si "there have been more than 50 interactions with the post (comments, likes, shares, etc.), then the title cannot be changed." La razón que da Meta es impedir que un sitio cambie la historia a espaldas de quienes ya interactuaron con ella. Cualquier otra propiedad sigue siendo editable. Deja el título bien antes de que salga el enlace, porque pasadas 50 interacciones estás editando un campo cuya actualización no verá nadie.
Cuando la misma URL sale a varias redes a la vez, adaptlypost publica una misma entrada en varias cuentas, y cada red lanza después su propio rastreador contra esa única URL según su propio calendario. El comportamiento del rastreo sigue siendo de la plataforma. Es el mismo reparto de trabajo que ves con el acortado de enlaces, donde X reescribe cada URL en un enlace t.co en cuanto publicas, y donde tu propio seguimiento de campañas tiene que sobrevivir a esa reescritura, que es el argumento para poner parámetros UTM en la URL antes de que llegue a ningún editor.
Preguntas frecuentes
¿facebookexternalhit ejecuta JavaScript?
Meta no lo dice. La documentación describe una descarga con cabecera Range, unos pocos segundos de tolerancia y un corte de 1 MB para dónde pueden estar las propiedades Open Graph, y nunca menciona el renderizado. Sirve tus etiquetas og: en la respuesta del servidor en lugar de inyectarlas desde el cliente.
¿Es facebookexternalhit el mismo rastreador que usan Instagram y Messenger?
Sí. Meta nombra a los tres en una sola frase, diciendo que el rastreador gestiona contenido "shared on one of Meta's family of apps, such as Facebook, Instagram, or Messenger." Un solo user agent cubre el rastreo de vistas previas en esas superficies.

¿Por qué facebookexternalhit golpea mi servidor a ráfagas?
Meta no publica ninguna tasa de rastreo, ningún presupuesto de peticiones ni soporte de crawl-delay para él. La documentación lista propósito, cadenas de user agent, requisitos del servidor y tratamiento de robots.txt, y ahí se detiene. Limitar la tasa por IP contra el conjunto de rutas de AS32934 es la única palanca que te deja la documentación.
¿Debería permitir facebookexternalhit y bloquear meta-externalagent?
Esa combinación es justo para lo que existen los user agents separados. Permitir facebookexternalhit mantiene funcionando las tarjetas de vista previa en Facebook, Instagram y Messenger, mientras que un Disallow: / bajo User-agent: meta-externalagent ataca al rastreador que Meta describe como entrenador de modelos fundacionales de IA.
¿Qué significa la cabecera Range en una petición de rastreo?
Pide a tu servidor una ventana de bytes en lugar del documento entero, y la petición de ejemplo de Meta usa Range: bytes=0-524288, los primeros 512 KB. Meta acepta cualquiera de los dos comportamientos: respetar la cabecera y devolver los bytes pedidos con todas las propiedades necesarias dentro, o ignorar la cabecera por completo y enviar la respuesta entera.
¿Cómo fuerzo a Meta a volver a rastrear una URL?
Pásala por el Sharing Debugger en /tools/debug/, que Meta señala como la forma de disparar un scrape, o llama a la Sharing API. La propia página de buenas prácticas de Meta describe el Debugger como la herramienta para sitios que necesitan actualizar sus etiquetas más a menudo que el periodo estándar de 24 horas.
AdaptlyPost
Prueba gratis de 7 días
Analíticas multiplataforma
Bandeja Social
Asistente con IA
¿Un enlace compartido en privado en un chat de Messenger se rastrea igual que una publicación pública?
Meta dice que un share puede venir de copiar y pegar un enlace o del plugin social de Facebook, no solo de un botón para compartir. Una URL pegada en un chat de Messenger dispara la misma petición de facebookexternalhit que un enlace publicado públicamente en Facebook. Meta no documenta ninguna ruta de rastreo aparte para un mensaje privado, solo la familia de apps de la que puede venir un share.
¿Por qué facebookexternalhit aparece en minúsculas en mis logs del servidor?
La documentación de Meta escribe el rastreador como FacebookExternalHit en los títulos y en el texto, pero la cadena que realmente envía va en minúsculas: facebookexternalhit/1.1. Una regla de filtrado o de lista blanca basada en esa escritura camel case se pierde las peticiones reales. Compara por una subcadena sin distinguir mayúsculas y minúsculas.
¿Qué codificación exige facebookexternalhit a mi servidor?
Los requisitos del rastreador de Meta dicen que tu servidor debe usar codificación gzip y deflate. Eso va junto al resto de la lista: etiquetas Open Graph dentro del primer 1 MB, una página rastreable en pocos segundos, un manejo correcto de la cabecera Range y la opción de la lista blanca de IPs. Meta pone gzip y deflate en primer lugar y enuncia el requisito sin matices.
¿Meta llega a ignorar mi regla Disallow del robots.txt para facebookexternalhit?
Meta dice que facebookexternalhit puede saltarse el robots.txt cuando hace comprobaciones de seguridad o integridad, como buscar malware o contenido malicioso. Meta-ExternalFetcher tiene la misma excepción, porque obtiene enlaces que una persona pidió directamente. Una regla Disallow tampoco actúa al instante: Meta pide hasta 24 horas porque los rastreadores pueden guardar en caché el robots.txt durante ese tiempo.
Ponlo en práctica con AdaptlyPost
¿Te resultó útil este artículo?
¡Cuéntanos qué te parece!
Vernos más en Google
Un clic marca AdaptlyPost como fuente preferida y nuestros artículos aparecen más arriba en tus Noticias destacadas, el modo IA y los resúmenes con IA.
Antes de irte...
AdaptlyPost
Programa tu contenido en todas las plataformas
Gestiona todas tus cuentas de redes sociales en un solo lugar con AdaptlyPost.
Analíticas multiplataforma
Bandeja Social
Asistente con IA
Términos relacionados del glosario


De dónde sale l.facebook.com y por qué los clics llegan como Direct
Facebook enruta los clics salientes por l.facebook.com, su link shim. Esto es lo que el salto le hace a tu referrer y por qué una visita llega como directa.


Cómo deciden las etiquetas Open Graph lo que muestra cada red
Las cuatro etiquetas Open Graph que exige el protocolo, qué redes las leen, cuáles leen etiquetas twitter: en su lugar y cómo ver lo que recibió un crawler.


Qué devuelve el endpoint content_publishing_limit de Instagram
El endpoint content_publishing_limit de Instagram devuelve quota_usage más un bloque config con quota_total 50 y quota_duration 86400 segundos.
Artículos Relacionados


Qué concede realmente el scope instagram_business_content_publish
El scope instagram_business_content_publish permite a una app crear posts orgánicos en Instagram, y depende de instagram_business_basic en cada llamada.


Todos los límites que la API de Reels de Instagram impone a tu vídeo
Meta limita en la API de Reels de Instagram un reel a 15 minutos y 300 MB y solo acepta MOV o MP4. Aquí están todas las especificaciones y sus errores.


La sesión de subida reanudable de Instagram y el host rupload
Una subida reanudable de Instagram empieza con upload_type=resumable en /media y sigue con un POST a rupload.facebook.com con offset y file_size.

