Internal Documentation

International SEO Checklist

Prioridades y acciones para un sitio web multilingue e internacional. Checklist adaptado para Browser Console AI con 6 idiomas y variantes por pais.

24
Completados
3
Parciales
4
Faciles
9
Pendientes

Estructura Multilingue

P1
  • Rutas por idioma (/en, /es, /fr, /de, /it, /pt)
  • Sistema de i18n implementado
  • 1 archivo por idioma (en.json, es.json, etc.)
  • Variantes por pais dentro del archivo (_variants)
  • Deteccion del pais por SSR (x-vercel-ip-country)
  • No duplicar archivos por pais

Hreflang + Canonical

P1
  • Etiquetas hreflang para todas las versiones

    Implementado en layout.tsx con generateMetadata

  • Etiqueta x-default

    x-default apunta a /en

  • Canonical correcto por idioma

    Canonical dinamico en generateMetadata

  • Evitar paginas duplicadas entre idiomas
  • No indexar rutas incorrectas/antiguas

Implementado en app/[locale]/layout.tsx:

export async function generateMetadata({ params }) {
  const { locale } = await params
  const languages: Record<string, string> = {}
  for (const l of locales) {
    languages[l] = `${baseUrl}/${l}`
  }
  languages["x-default"] = `${baseUrl}/en`
  return {
    alternates: { canonical: `${baseUrl}/${locale}`, languages }
  }
}

Sitemaps por Idioma

P1
  • sitemap.xml con todos los idiomas

    Actualizado con 6 idiomas + language alternates

  • Sitemaps separados por idioma (opcional)

    Next.js genera un solo sitemap, alternativa: sitemap index

  • Sitemaps enlazados en robots.txt
  • URLs incluyen el idioma correspondiente

Implementado en app/sitemap.ts:

// Incluye 6 idiomas con alternates
const sitemapEntries = locales.flatMap((locale) =>
  routes.map((route) => ({
    url: `${baseUrl}/${locale}${route.path}`,
    alternates: {
      languages: Object.fromEntries(
        locales.map((l) => [l, `${baseUrl}/${l}${route.path}`])
      ),
    },
  }))
)

Rendimiento (Core Web Vitals)

P1
  • LCP < 2.5s

    Medir con Lighthouse, objetivo < 2.5s

  • CLS < 0.1

    Revisar layout shifts en animaciones

  • TTFB < 200ms

    Vercel Edge + CDN

  • Imagenes en WebP/AVIF

    Configurado en next.config.mjs con AVIF/WebP

  • Lazy loading para imagenes y recursos
  • CSS/JS minificados

    Next.js Turbopack

  • Cache y CDN configurados (Vercel)
  • Optimizado para movil (score >85)

    Verificar score movil en PageSpeed Insights

Optimizacion de imagenes habilitada en next.config.mjs:

images: {
  formats: ['image/avif', 'image/webp'],
  deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048],
  imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
}

SEO Tecnico

P2
  • robots.txt correcto
  • HTTPS con HSTS

    Vercel maneja HTTPS automaticamente

  • Evitar redirecciones multiples
  • No hay enlaces rotos

    Ejecutar crawler para verificar

  • URLs limpias y legibles
  • Breadcrumbs Easy

    Agregar componente Breadcrumb con JSON-LD

  • No-index en entornos dev/staging Easy

    Agregar header X-Robots-Tag en preview

Metadatos por Pagina

P2
  • <title> unico por idioma

    seoData traducido en page.tsx

  • <meta description> unico por idioma

    seoData traducido en page.tsx

  • OG:title traducido

    generateMetadata incluye OG tags

  • OG:description traducido

    generateMetadata incluye OG tags

  • OG:image por idioma

    Crear imagenes por idioma (opcional)

  • Twitter Card configurado
  • <html lang="xx"> dinamico

    HtmlLang client component

Implementado con HtmlLang client component:

// src/components/seo/html-lang.tsx
"use client"
export function HtmlLang() {
  const { locale } = useI18n()
  useEffect(() => {
    document.documentElement.lang = locale
  }, [locale])
  return null
}

Contenido por Pagina

P2
  • H1 unico por pagina
  • Estructura clara: H1 → H2 → H3
  • Keywords adaptadas por idioma

    Revisar keywords por mercado

  • CTA visible sin scroll
  • Variantes culturales por pais (hero, testimonios)
  • Imagenes con alt descriptivo Easy

    Revisar todas las imagenes

  • Contenido consistente entre idiomas
  • Evitar contenido delgado

Datos Estructurados (JSON-LD)

P2
  • Organization

    Integrado en homepage

  • SoftwareApplication

    Con traducciones por idioma

  • FAQ Easy

    Componente listo para usar

  • HowTo (install steps)

    Con pasos traducidos

  • BreadcrumbList Easy

    Componente listo para inner pages

  • Validado con Schema.org

    Usar Rich Results Test

Implementado en src/components/seo/json-ld.tsx:

// Componentes disponibles:
// - OrganizationSchema
// - SoftwareApplicationSchema({ locale })
// - HowToSchema({ locale })
// - BreadcrumbSchema({ items, locale })
// - FAQSchema({ items })

// Uso en page.tsx:
<OrganizationSchema />
<SoftwareApplicationSchema locale={locale} />
<HowToSchema locale={locale} />

Localizacion Real

P3
  • Hero adaptado por pais (UK, DE, etc.)
  • Bullets adaptados con variantes
  • Testimonios localizados

    Agregar testimonios por region

  • Precios adaptados (GBP, EUR)

    Si aplica pricing page

  • Ejemplos/casos por region
  • Imagenes culturalmente apropiadas

Tracking Internacional

P3
  • Google Analytics 4 / Vercel Analytics

    Vercel Analytics activo

  • Search Console configurado

    Configurar propiedades por idioma

  • Eventos clave: CTA, registro, descarga Easy

    Agregar eventos personalizados

  • Deteccion de pais en Analytics

    Vercel detecta pais automaticamente

  • Funnels por idioma

Opcionales (Enterprise)

P4
  • Redireccion inteligente por idioma navegador

    Opcional: redirect segun Accept-Language

  • Selector de idioma facil en UI
  • Backlinks internacionales
  • A/B testing del hero por mercado
  • Heatmaps por idioma

Auditoria Rapida (1 minuto)

  • Cada idioma tiene su propia URL
  • Hreflang correcto + x-default
  • Canonical correcto por idioma
  • Metadatos traducidos
  • OG tags por idioma
  • Contenido traducido + localizado
  • Velocidad movil (verificar con Lighthouse)
  • Sitemaps con 6 idiomas + alternates
  • No duplicados indexados
  • JSON-LD integrados (Org, App, HowTo)

Implementaciones Recientes

  • Sitemap.ts actualizado con 6 idiomas + language alternates
  • generateMetadata con hreflang, x-default y canonical
  • HtmlLang client component para html lang dinamico
  • JSON-LD schemas (Organization, SoftwareApplication, HowTo)
  • Optimizacion de imagenes (AVIF/WebP) habilitada
  • Metadata traducida por idioma (title, description, OG tags)

Proximos Pasos Recomendados

  1. 1
    Validar JSON-LD con Rich Results Test

    Verificar que los schemas sean validos en search.google.com/test/rich-results

  2. 2
    Medir Core Web Vitals

    Ejecutar Lighthouse y PageSpeed Insights para verificar LCP, CLS y FID

  3. 3
    Agregar FAQSchema en paginas relevantes

    El componente ya existe, solo integrarlo donde haya FAQs

  4. 4
    Configurar Google Search Console

    Propiedades por idioma para monitorear rendimiento internacional

  5. 5
    Agregar BreadcrumbSchema en inner pages

    Usar el componente BreadcrumbSchema en /docs y subpaginas