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.
Estructura Multilingue
- 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
- 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
- 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)
- 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
- 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
- <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
- 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)
- 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
- 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
- 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)
- 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
- 1Validar JSON-LD con Rich Results Test
Verificar que los schemas sean validos en search.google.com/test/rich-results
- 2Medir Core Web Vitals
Ejecutar Lighthouse y PageSpeed Insights para verificar LCP, CLS y FID
- 3Agregar FAQSchema en paginas relevantes
El componente ya existe, solo integrarlo donde haya FAQs
- 4Configurar Google Search Console
Propiedades por idioma para monitorear rendimiento internacional
- 5Agregar BreadcrumbSchema en inner pages
Usar el componente BreadcrumbSchema en /docs y subpaginas