NEWWorld's first AI visibility audit tool for Web3 is live.Run free audit →
PLAYBOOK Technical Last reviewed

Cachea imágenes IPFS a una CDN rápida para OpenGraph y crawlers SEO

Las gateways IPFS públicas timeoutan para crawlers SEO cerca del 40% del tiempo. El crawler de Google espera ~3 segundos; IPFS a menudo toma 5-8. Las versiones cacheadas en CDN arreglan los descartes de og:image, roturas de thumbnails NFT y LCP lento.

Time
1-2 hours for initial setup, automated thereafter
Difficulty
Intermediate
Impact
High

Por qué importa esto

Estado anterior (cómo se ve lo malo)

<!-- og:image points directly to IPFS gateway -->
<meta property="og:image"
      content="https://ipfs.io/ipfs/QmXyZ.../nft-artwork.png">

<!-- Result: ~40% of crawlers timeout, og:image discarded -->

Paso a paso

Paso 1: Elige una CDN: Cloudflare R2, Cloudinary o Vercel

Cloudflare R2: tier gratis (10GB storage), API compatible con S3, CDN global rápida. Mejor para alto volumen. Cloudinary: tier gratis (25k transformaciones/mes), transformaciones de imagen integradas. Mejor si necesitas redimensionado on-the-fly. Vercel Image Optimization: incluido con hosting Vercel, conversión automática a WebP. Mejor si ya estás en Vercel. Para la mayoría de proyectos NFT, elige Cloudflare R2.

Paso 2: Configura el bucket de CDN y configura acceso

Crea un bucket R2 con acceso público de lectura habilitado. Configura un dominio personalizado (ej., cdn.example.com) apuntando a él. Genera credenciales API para acceso de escritura. Documenta las credenciales de forma segura; las necesitarás para el pipeline de upload.

# Cloudflare R2 setup via wrangler CLI
wrangler r2 bucket create my-og-cache
# Then in dashboard: enable public access, add custom domain

Paso 3: Construye un script de upload que trae de IPFS y guarda en CDN

Para cada activo hosteado en IPFS que necesita estar en og:image, trae de la gateway IPFS, redimensiona a 1200x630, sube a CDN. Corre en el minteo de colección, publicación de página o como backfill por lotes para páginas existentes.

const sharp = require('sharp');
const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');

async function cacheIpfsToOg(ipfsHash, slug) {
  // Fetch from IPFS via reliable pinning service
  const response = await fetch(`https://gateway.pinata.cloud/ipfs/${ipfsHash}`);
  const buffer = await response.arrayBuffer();

  // Resize to 1200x630
  const resized = await sharp(Buffer.from(buffer))
    .resize(1200, 630, { fit: 'cover' })
    .png()
    .toBuffer();

  // Upload to R2
  const s3 = new S3Client({
    region: 'auto',
    endpoint: 'https://accountid.r2.cloudflarestorage.com',
    credentials: { accessKeyId: process.env.R2_ACCESS, secretAccessKey: process.env.R2_SECRET }
  });

  await s3.send(new PutObjectCommand({
    Bucket: 'my-og-cache',
    Key: `og/${slug}.png`,
    Body: resized,
    ContentType: 'image/png',
    CacheControl: 'public, max-age=31536000',
  }));

  return `https://cdn.example.com/og/${slug}.png`;
}

Paso 4: Actualiza las meta tags og:image para apuntar a la URL del CDN

Reemplaza las URLs de gateway IPFS en og:image, twitter:image y el ImageObject de structured data con URLs de CDN. Mantén las referencias de hash IPFS en tus contratos y metadata on-chain; esas se quedan para permanencia.

<meta property="og:image" content="https://cdn.example.com/og/nft-collection-1.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="twitter:image" content="https://cdn.example.com/og/nft-collection-1.png">

Paso 5: Configura headers de cache agresivos

Configura Cache-Control: public, max-age=31536000, immutable para las imágenes cacheadas. Como estás usando rutas CDN direccionadas por contenido (el slug típicamente incluye un hash), las imágenes nunca necesitan ser invalidadas. Los navegadores y CDNs cachean para siempre.

Cache-Control: public, max-age=31536000, immutable

Paso 6: Prueba con validadores de plataformas sociales

Twitter Card Validator (cards-dev.twitter.com/validator), LinkedIn Post Inspector (linkedin.com/post-inspector), Facebook Sharing Debugger (developers.facebook.com/tools/debug). Los tres deberían traer og:image exitosamente en 1-2 segundos. Si alguno timeoutea, tu setup de CDN necesita investigación.

Paso 7: Monitorea la tasa de hit del cache CDN

Cloudflare Analytics o el dashboard de tu CDN muestra la tasa de hit del cache. Apunta a 95%+. Las tasas de hit más bajas indican o un TTL demasiado bajo o demasiadas URLs únicas. Optimiza extendiendo el TTL o consolidando variantes de imagen.

FREE WEB3 AUDIT

Mira dónde aplica este playbook en tu sitio.

Corre una auditoría Crawlux gratis antes de empezar el playbook. Te dice qué correcciones son más urgentes.

Primera auditoría gratis · Sin registro · 60 segundos · Full PDF report

Estado posterior (cómo se ve lo bueno)

<!-- og:image points to CDN-cached version -->
<meta property="og:image"
      content="https://cdn.example.com/og/nft-XyZ.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:type" content="image/png">

<!-- IPFS hash still referenced from contract for permanence -->
<!-- CDN serves crawlers; IPFS serves permanence -->

Cómo validar la corrección

Errores comunes

Pitfall

Olvidar og:image:width y og:image:height

Twitter y LinkedIn usan estos para decisiones de layout. Sin ellos, las imágenes pueden saltarse o renderizarse incorrectamente. Siempre configura ambos a 1200 y 630.

Pitfall

Usar URL de gateway IPFS para og:image directamente

Incluso si IPFS resulta ser rápido para un fetch, no es confiable a través de crawlers. Siempre cachea a CDN antes de referenciar en og:image.

Pitfall

Gateways IPFS públicas en lugar de servicio de pinning

Las gateways públicas (ipfs.io, cf-ipfs.com) están fuertemente rate-limited y no son confiables. Usa Pinata, Filebase o tu propia gateway para el fetch de fuente en tu script de caching.

Pitfall

Formato de imagen y Content-Type desajustados

Servir un JPEG con Content-Type image/png rompe algunos crawlers. Siempre coincide la extensión de archivo y Content-Type. Usa sharp para convertir a un formato conocido consistentemente.

Pitfall

Saltarse el monitoreo de tasa de hit del cache

Si la tasa de hit es baja, tu CDN está haciendo peticiones extra al origen. Eso es más lento y cuesta más. Monitorea y ajusta.

Si algo se rompe: rollback

Actualiza las meta tags og:image de regreso a URLs de gateway IPFS. El comportamiento de crawl revierte en horas. Mantén el bucket de CDN; las imágenes cacheadas no dañan nada dejadas en su lugar.

Corre una auditoría Crawlux gratis sobre esta corrección

Crawlux valida las correcciones de schema, técnicas y AEO de este playbook automáticamente. Plan gratis en un dominio.

Ejecutar auditoría gratuita →

Preguntas frecuentes

¿Funciona esto para NFTs completamente on-chain?

Sí. Incluso el arte NFT completamente on-chain (guardado como base64 en el contrato) necesita caching CDN para propósitos de og:image. Trae del endpoint tokenURI de tu contrato, decodifica base64, redimensiona, cachea. La versión on-chain se queda canónica para verificación; la versión CDN sirve a crawlers.

¿Es el dual-hosting un compromiso de centralización?

Ligero sí. Los puristas de descentralización pueden objetar. Respuesta práctica: IPFS es la fuente de verdad para permanencia; CDN es una capa de performance. Si tu CDN cae, el activo todavía existe en IPFS. El compromiso vale la pena por el impacto SEO.

¿Cómo manejo imágenes OG dinámicas?

Para OG dinámico (ej., thumbnails generados por NFT con overlay de título), usa un servicio como Vercel OG, transforms on-the-fly de Cloudinary o tu propia API de generación de imágenes. Cachea el resultado agresivamente (caching de borde CDN). Mismo patrón: generación dinámica, salida cacheada.

¿Qué hay de Arweave en lugar de IPFS?

Mismo problema, misma corrección. Las gateways Arweave son ligeramente más rápidas que las gateways IPFS pero todavía no confiables para crawlers. Cachea activos Arweave a CDN para og:image. El hash de Arweave se queda como referencia canónica.

¿Cuánto cuesta esto?

El tier gratis de Cloudflare R2 (10GB storage, 1M requests/mes) cubre la mayoría de proyectos NFT. Más allá de eso, R2 es $0.015/GB/mes por storage, $0 egress. Barato. El costo es negligible comparado con el tráfico de shares perdido por og:image rotos.

Playbooks relacionados

Guías pilares

Módulos de auditoría

RUN YOUR FIRST AUDIT

Corre el playbook contra una auditoría real.

Recibe un reporte de auditoría Crawlux gratis y úsalo como línea base para el trabajo en este playbook.

Primera auditoría gratis · Sin registro · 60 segundos · Full PDF report

Audit this fix → Free audit