> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Meta Media Crawler bloqueado (Instagram / Threads)

> Cómo corregir el código de error 440 (y los relacionados Instagram 138 / Threads 379) causado por reglas de robots.txt o antibots que bloquean el crawler de medios de Meta.

El código de error **440** (y los relacionados de Instagram **138** / Threads **379**) se devuelve cuando el crawler de publicación de Meta no puede descargar tu URL de medios, normalmente porque `robots.txt` o una regla de bloqueo de bots en tu servidor está denegando el acceso al crawler.

<Note>
  Esta página cubre los fallos cuyo mensaje o detalles indican que la red social no pudo descargar el medio, haciendo referencia normalmente a `facebookexternalhit`, `robots.txt`, `"Restricted by robots.txt"`, `"HTTP error code 403"`, o el error de Meta `2207052`. Para errores de proporción o formato en el código 138 de Instagram, consulta las [Directrices de medios de Instagram](/media-guidelines/instagram) o las [Directrices de medios de Threads](/media-guidelines/threads).
</Note>

## Síntoma

Cuando se bloquea el crawler, verás errores como estos:

```json Error 440 (primary) theme={"system"}
{
  "status": "error",
  "errors": [{
    "action": "post",
    "code": 440,
    "message": "The social network could not download media from this URL (for example Instagram/Meta error 2207052). Ensure the file is publicly reachable by the platform's crawlers (e.g. facebookexternalhit), via media bucket's robots.txt file, not only in a browser.",
    "details": "Media download has failed.: The media could not be fetched from the provided URI...",
    "platform": "instagram",
    "status": "error"
  }],
  "postIds": [],
  "id": "..."
}
```

```json Instagram Error 138 (fallback — less specific upstream response) theme={"system"}
{
  "status": "error",
  "errors": [{
    "retryAvailable": true,
    "status": "error",
    "code": 138,
    "details": "Media download has failed.: The media could not be fetched from the provided URI. Video download failed with: HTTP error code 403. Restricted by robots.txt",
    "action": "post",
    "platform": "instagram",
    "message": "Instagram Error: Instagram cannot process your post at this time. Please try your post again."
  }],
  "postIds": [],
  "id": "..."
}
```

```json Threads Error 379 theme={"system"}
{
  "status": "error",
  "errors": [{
    "status": "error",
    "code": 379,
    "message": "Error posting to Threads.",
    "action": "post",
    "platform": "threads"
  }],
  "postIds": [],
  "id": "..."
}
```

<Note>
  El código **440** es el código específico de Ayrshare para este fallo y su mensaje menciona explícitamente `facebookexternalhit` y `robots.txt`: si ves 440, estás en la página correcta. El código **138** se emite por la misma causa raíz cuando la respuesta upstream es menos específica; 138 también se usa para problemas de proporción/formato, por lo que la variante de fetch de medios se identifica por `"Restricted by robots.txt"` o `"HTTP error code 403"` en `details`. El código **379** no incluye un campo `details`: si Threads falla junto con un 440 o 138 de Instagram, la causa raíz suele ser la misma.
</Note>

## Por qué ocurre

Cuando publicas en Instagram o Threads a través de Ayrshare, los servidores de Meta descargan tu medio desde la URL que proporcionas. Este fetch desde el servidor utiliza el User-Agent `facebookexternalhit`. Si el `robots.txt` de tu servidor prohíbe este crawler —o una regla WAF/de protección antibots lo bloquea—, Meta no puede descargar el archivo y la publicación falla.

La publicación en páginas de Facebook usa una ruta de ingesta distinta, por eso la misma `mediaUrl` puede funcionar en Facebook pero fallar en Instagram y Threads.

## Solución: actualizar tu robots.txt

### Recomendado: permitir Meta explícitamente y mantener el resto abierto

Añade estas reglas a tu archivo `robots.txt`:

```txt robots.txt theme={"system"}
User-agent: facebookexternalhit
Allow: /

User-agent: *
Allow: /
```

Esto permite explícitamente el crawler de Meta y mantiene tu sitio abierto a otros crawlers (Google, Bing, etc.).

### Avanzado: bloquear todo salvo publicadores sociales

Si quieres bloquear la mayoría de crawlers pero permitir plataformas de redes sociales:

```txt robots.txt theme={"system"}
User-agent: facebookexternalhit
Allow: /

User-agent: Twitterbot
Allow: /

User-agent: LinkedInBot
Allow: /

User-agent: Pinterest
Allow: /

User-agent: *
Disallow: /
```

<Warning>
  Utiliza un único bloque `User-agent: *` colocado al final del archivo. Los crawlers conformes con el RFC 9309 combinan varios grupos comodín en uno solo, pero no todos los parsers cumplen el RFC: los grupos comodín duplicados son una causa habitual de que las reglas se descarten o se apliquen de forma inconsistente.
</Warning>

## Verifica que Meta pueda acceder a tu URL

Antes de reintentar tu post, verifica que el crawler de Meta puede acceder ahora a tu medio. Ejecuta este comando reemplazando `$URL` por tu URL de medio completa:

```bash theme={"system"}
curl -v --compressed -H "Range: bytes=0-524288" -H "Connection: close" \
  -A "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)" \
  "$URL"
```

<ul class="custom-bullets">
  <li>**Respuesta correcta:** HTTP 200 o 206 con datos binarios en el cuerpo.</li>
  <li>**Respuesta bloqueada:** HTTP 403 o una página vacía / de error HTML.</li>
</ul>

<Note>
  Según la documentación de Meta, los cambios en `robots.txt` pueden tardar hasta 24 horas en propagarse por la caché del crawler de Meta. Si la verificación es correcta pero tu post sigue fallando, espera y reintenta más tarde.
</Note>

## Si esto no resuelve el problema

Si has actualizado `robots.txt` y verificado con el comando `curl` pero sigues viendo fallos:

<ul class="custom-bullets">
  <li>**Retardo de propagación de 24 horas** — Meta almacena en caché `robots.txt`. Espera hasta 24 horas después de hacer cambios antes de reintentar.</li>
  <li>**Reglas de WAF o antibots** — Cloudflare Bot Fight Mode, los grupos de reglas gestionadas de AWS WAF y servicios similares pueden bloquear los rangos IP del crawler de Meta aunque el `robots.txt` lo permita. Revisa tus logs de WAF y añade una excepción para `facebookexternalhit`.</li>
  <li>**Protección hotlink / comprobaciones de Referer** — Algunos CDNs bloquean solicitudes desde IPs de centros de datos o sin un `Referer` válido. Añade a la whitelist el crawler de Meta o desactiva la protección hotlink para las rutas de medios.</li>
  <li>**Expiración de URLs firmadas / presigned** — Si tu URL de medio tiene marca de caducidad (habitual con URLs presigned de S3), asegúrate de que no expire antes de que el crawler de Meta pueda descargarla. Para posts programados, genera URLs que sigan siendo válidas hasta bien después de la hora programada.</li>
  <li>**Alojamiento de medios gestionado** — Si usas un servicio como Cloudinary, Imgix o similar donde no puedes editar `robots.txt`, revisa su documentación para localizar el ajuste de allow-list del crawler de Meta/Facebook.</li>
</ul>

Si ninguna de estas opciones resuelve el problema, [contacta con el soporte de Ayrshare](https://www.ayrshare.com/contact) e incluye:

* El `postId` fallido de la respuesta de error
* La salida del comando `curl` de verificación anterior
* El contenido de tu `robots.txt`

## Reintentar un post fallido

Una vez resuelto el problema de acceso del crawler, reintenta tu post fallido usando el endpoint [Retry Post](/apis/post/retry-post).

## Consulta también

<ul class="custom-bullets">
  <li>[API de Instagram](/apis/post/social-networks/instagram)</li>
  <li>[API de Threads](/apis/post/social-networks/threads)</li>
  <li>[Directrices de medios de Instagram](/media-guidelines/instagram)</li>
  <li>[Directrices de medios de Threads](/media-guidelines/threads)</li>
  <li>[Códigos de error de Ayrshare](/errors/errors-ayrshare#media-fetch--crawler-access-errors)</li>
  <li>[Fallos al publicar vídeos](/help-center/technical-support/video_publishing_fails)</li>
</ul>
