> ## 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)

> Soluciona el error 479 cuando robots.txt o un WAF bloquea el crawler facebookexternalhit de Meta en tus medios de Instagram o Threads y prueba con curl.

El código de error **479** es el código específico de Ayrshare, **sin reintento**, que se devuelve cuando 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 (`facebookexternalhit`). Solo se devuelve después de que también haya fallado el realojamiento automático de respaldo de Ayrshare, lo que indica claramente un bloqueo en el servidor de origen o una fuente inaccesible.

Cuando Ayrshare publica en Instagram o Threads, no se limita a entregar tu URL a Meta y rendirse. Ayrshare reintenta automáticamente la descarga y, si Meta sigue sin poder acceder al medio, **realoja una copia en su propio CDN** y pide a Meta que descargue esa copia. El código **479** significa que ni siquiera ese respaldo consiguió que Meta descargara el medio, así que reintentar la misma solicitud no servirá de nada hasta que se corrija el problema de alojamiento de fondo (`retryAvailable: false`, HTTP 400).

> [!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 subcódigo de Meta `2207052`. Para errores de proporción o formato en el código 138 de Instagram, consulta las [Directrices de medios de Instagram](https://www.ayrshare.com/docs/media-guidelines/instagram.md) o las [Directrices de medios de Threads](https://www.ayrshare.com/docs/media-guidelines/threads.md).

## Síntoma

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

```json Error 479 (primary — dedicated, non-retryable) theme={"system"}
{
  "status": "error",
  "errors": [{
    "action": "post",
    "code": 479,
    "retryAvailable": false,
    "message": "The social network could not fetch the media from this URL, even after Ayrshare re-hosted it on its own CDN (Instagram/Meta subcode 2207052). Ensure the file is publicly reachable by Meta's crawlers (facebookexternalhit / Facebot) — check your robots.txt and any WAF/bot rules — not only in a browser. Retrying the same URL will not help until hosting is fixed.",
    "details": "Media download has failed.: The media could not be fetched from the provided URI. Restricted by robots.txt (HTTP error code 403). Meta subcode 2207052.",
    "platform": "instagram",
    "status": "error"
  }],
  "postIds": [],
  "id": "..."
}
```

```json Error 440 (transient ingestion — retryable) theme={"system"}
{
  "status": "error",
  "errors": [{
    "action": "post",
    "code": 440,
    "retryAvailable": true,
    "message": "The social network could not ingest the media in time. This is usually transient (for example Meta subcode 2207032 'download too slow' or 2207003 'create media fail'). Retry the post.",
    "details": "Media download has failed.: Media download took too long / could not create media...",
    "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]
>
> Cómo se reparten estos códigos:
>
> <ul>
>   <li>**Código 479: descarga de medios / bloqueo del crawler (sin reintento).** Es el código del fallo que cubre esta página. Se devuelve con `retryAvailable: false` cuando Meta no pudo descargar el medio (subcódigo `2207052` o un patrón de texto de descarga de medios) **incluso después de que Ayrshare lo realojara en su propio CDN**. Su mensaje menciona explícitamente `facebookexternalhit` / `Facebot` y `robots.txt`: si ves 479, estás en la página correcta. Corrige el alojamiento antes de reintentar.</li>
>   <li>**Código 440: ingesta transitoria (con reintento).** Ahora se usa para el agotamiento realmente transitorio de la ingesta: subcódigos de Meta `2207032` ("download too slow") / `2207003` ("create media fail"), o un agotamiento sin clasificar. Lleva `retryAvailable: true`; reintenta mediante [`/post/retry`](https://www.ayrshare.com/docs/apis/post/retry-post).</li>
>   <li>**Código 138: respaldo menos específico de Instagram.** 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 descarga de medios se identifica por `"Restricted by robots.txt"` o `"HTTP error code 403"` en `details`.</li>
>   <li>**Código 379: Threads.** No incluye un campo `details`. Si Threads falla junto con un 479 o 138 de Instagram, la causa raíz suele ser la misma.</li>
> </ul>

## 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.

## 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>
  <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.

## Si esto no resuelve el problema

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

<ul>
  <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

El comportamiento del reintento depende del código que hayas recibido:

<ul>
  <li>**Código 440 (transitorio, `retryAvailable: true`)**: la ingesta simplemente se quedó sin tiempo o encontró un error temporal de Meta. Reintenta directamente con el [endpoint Retry Post](https://www.ayrshare.com/docs/apis/post/retry-post.md); no hace falta cambiar nada en tu alojamiento.</li>
  <li>**Código 479 (`retryAvailable: false`)**: Meta no pudo descargar el medio ni siquiera después de que Ayrshare lo realojara en su propio CDN, así que reintentar la misma URL bloqueada volverá a fallar. **Corrige primero el alojamiento**: permite los crawlers de Meta (`facebookexternalhit` / `Facebot`) en `robots.txt` y en tu WAF, o realoja el medio en un CDN al que Meta pueda acceder. Verifícalo con el comando `curl` anterior y después reintenta mediante el [endpoint Retry Post](https://www.ayrshare.com/docs/apis/post/retry-post.md).</li>
</ul>

## Consulta también

<ul>
  <li>[API de Instagram](https://www.ayrshare.com/docs/apis/post/social-networks/instagram.md)</li>
  <li>[API de Threads](https://www.ayrshare.com/docs/apis/post/social-networks/threads.md)</li>
  <li>[Directrices de medios de Instagram](https://www.ayrshare.com/docs/media-guidelines/instagram.md)</li>
  <li>[Directrices de medios de Threads](https://www.ayrshare.com/docs/media-guidelines/threads.md)</li>
  <li>[Códigos de error de Ayrshare](https://www.ayrshare.com/docs/errors/errors-ayrshare.md#media-fetch-crawler-access-errors)</li>
  <li>[Fallos al publicar vídeos](https://www.ayrshare.com/docs/help-center/technical-support/video-publishing-fails.md)</li>
</ul>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.