12 Errores SEO que Arruinan tu Blog (y Como Arreglarlos)
Los errores SEO mas comunes que destrozan blogs de desarrolladores. Diagnostico, fix y verificacion para cada uno. Para blogs en Next.js y cualquier stack.
12 Errores SEO que Arruinan tu Blog (y Como Arreglarlos)
He auditado blogs de desarrolladores durante anos. Buenos blogs, con contenido real, escrito por personas que saben de lo que hablan. Blogs que no aparecen en Google por errores tecnicos de SEO que se arreglan en una tarde.
Si tu blog no indexa en Google o aparece en la pagina 8 para keywords donde deberia dominar, lo mas probable es que tengas varios de estos 12 errores. Este post te da el diagnostico, el fix y la verificacion para cada uno.
Por que un blog de desarrollador puede rankear mejor que el tuyo
Los blogs de devs tienen una ventaja natural: la intencion de busqueda es tecnica y especifica, hay menos competencia que en temas generales, y Google premia el contenido con profundidad real.
El problema es que la mayoria los arma rapido, sube contenido, y asume que Google va a descubrirlo solo. No funciona asi.
Estos 12 errores son los que veo repetidos en practicamente todos los blogs tecnicos que he auditado. Ninguno requiere conocimiento avanzado para arreglarlo. Solo requieren hacerlo.
Error 1: No tener sitemap.xml o tenerlo mal configurado
Sin sitemap, Google depende de seguir links para descubrir tus paginas. Si tu blog es nuevo o tiene pocas paginas enlazadas desde afuera, puede tardar semanas o meses en indexar contenido.
Como detectarlo:
# Verifica que tu sitemap existe y responde
curl -I https://tudominio.com/sitemap.xmlSi recibes un 404, no tienes sitemap. Si recibes 200, revisa el contenido:
curl https://tudominio.com/sitemap.xml | head -50Busca que las URLs en el sitemap sean las URLs canonicas (con HTTPS, sin trailing slash inconsistente) y que incluya todas tus paginas de blog.
Como arreglarlo:
En Next.js 16, crea app/sitemap.ts. La guia completa esta en como crear un sitemap automatico en NextJS, pero la estructura basica es:
// app/sitemap.ts
import { MetadataRoute } from "next";
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: "https://tudominio.com",
lastModified: new Date(),
changeFrequency: "weekly",
priority: 1,
},
// tus URLs de blog aqui
];
}Como verificar que quedo bien:
Abre Google Search Console, ve a Sitemaps, pega la URL de tu sitemap y dale a Enviar. GSC te dira si hay errores de parseo o URLs que no puede crawlear.
Error 2: Ignorar las canonical URLs y regalar trafico a contenido duplicado
Si tu blog es accesible en http://tudominio.com, https://tudominio.com, https://www.tudominio.com y https://tudominio.com/ (con trailing slash), para Google son cuatro versiones diferentes del mismo contenido. El link juice se divide entre cuatro URLs.
Como detectarlo:
# Prueba las variantes manualmente
curl -I http://tudominio.com
curl -I https://tudominio.com
curl -I https://www.tudominio.com
# Revisa el header Location en los redirects
# Todos deben terminar en tu URL canonicalTambien revisa el source de cualquier pagina y busca <link rel="canonical":
curl -s https://tudominio.com/blog/tu-post | grep -i canonicalComo arreglarlo:
En Next.js, la canonical se configura en la Metadata API:
// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }) {
return {
alternates: {
canonical: `https://tudominio.com/blog/${params.slug}`,
},
};
}Ademas, configura redirects en next.config.ts para consolidar las variantes de URL a una sola version.
Como verificar que quedo bien:
Inspecciona el HTML de tu pagina y confirma que el tag canonical apunta a la URL correcta. Usa la herramienta de inspeccion de URLs en GSC para ver que canonical reconoce Google.
Error 3: Meta tags faltantes o mal implementados
Google usa el <title> y la <meta name="description"> para entender de que trata tu pagina y para mostrarla en los resultados. Sin ellos, Google inventa uno, y usualmente elige texto aleatorio de tu contenido.
Como detectarlo:
# Verifica title y description de cualquier pagina
curl -s https://tudominio.com/blog/tu-post | grep -E "<title>|meta name=\"description\""Los errores mas comunes:
<title>vacio o generico ("Untitled" o el nombre del site en todas las paginas)descriptionfaltantedescriptionde mas de 160 caracteres (Google la corta)- Open Graph tags ausentes (tu post se ve horrible cuando alguien lo comparte)
Como arreglarlo:
La guia completa de Metadata API en Next.js esta en SEO en Next.js: Metadata API, Open Graph y Sitemap. El minimo que debes tener:
// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }) {
const post = await getPost(params.slug);
return {
title: post.title, // max 60 chars
description: post.description, // max 160 chars
openGraph: {
title: post.title,
description: post.description,
images: [post.featuredImage],
},
};
}Como verificar que quedo bien:
Pega tu URL en opengraph.xyz para ver como se ve el preview en redes. Usa la herramienta de inspeccion de URLs en GSC para confirmar que Google ve los meta tags correctos.
Error 4: robots.txt que bloquea lo que no debe (o que no existe)
Un robots.txt mal configurado puede bloquearle el acceso a Google a partes de tu sitio -- o a todo tu sitio. Lo he visto con Disallow: / en produccion porque alguien copio el robots.txt de staging sin pensar.
Como detectarlo:
# Revisa tu robots.txt
curl https://tudominio.com/robots.txtBusca lineas como:
Disallow: /-- bloquea todo el sitioDisallow: /blog/-- bloquea todas las paginas de blogUser-agent: Googlebot+Disallow-- bloquea especificamente a Google
Tambien existe el X-Robots-Tag, un header HTTP que puede bloquear indexacion sin que aparezca en el robots.txt. Para detectarlo:
curl -I https://tudominio.com/blog/tu-post | grep -i x-robotsEl Verificador de headers de seguridad gratuito de datahogo analiza todos los headers de respuesta de tu sitio, incluyendo X-Robots-Tag. Si alguna configuracion de middleware o CDN esta enviando ese header sin que lo sepas, lo detecta al instante.
Como arreglarlo:
Un robots.txt minimo y correcto para un blog publico:
User-agent: *
Allow: /
Sitemap: https://tudominio.com/sitemap.xmlEn Next.js puedes generarlo como app/robots.ts:
// app/robots.ts
import { MetadataRoute } from "next";
export default function robots(): MetadataRoute.Robots {
return {
rules: { userAgent: "*", allow: "/" },
sitemap: "https://tudominio.com/sitemap.xml",
};
}Como verificar que quedo bien:
Google Search Console tiene una herramienta especifica para probar robots.txt en Configuracion > robots.txt. Pega tus URLs y verifica que Googlebot puede acceder a ellas.
Error 5: No tener structured data (Google no entiende tu contenido)
Structured data (o schema markup) es JSON-LD que le dice a Google exactamente que tipo de contenido es tu pagina. Sin el, Google infiere. Con el, Google puede mostrar tu contenido en rich results: preguntas frecuentes en los resultados, breadcrumbs, informacion de articulo.
Como detectarlo:
curl -s https://tudominio.com/blog/tu-post | grep -i "application/ld+json"Si no hay output, no tienes structured data.
Como arreglarlo:
Para un blog post, el schema minimo util es BlogPosting con una seccion FAQPage. La implementacion completa esta en SEO en Next.js: Metadata API, Open Graph y Sitemap. El snippet basico:
// En tu page.tsx de blog post
const jsonLd = {
"@context": "https://schema.org",
"@type": "BlogPosting",
headline: post.title,
author: {
"@type": "Person",
name: post.author.name,
},
datePublished: post.publishedAt,
dateModified: post.updatedAt,
};
// En el JSX
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>Como verificar que quedo bien:
Usa el Rich Results Test de Google. Pega tu URL y te dice si el schema es valido y si tu pagina es elegible para rich results.
Error 6: Ignorar Core Web Vitals (LCP, CLS, INP)
Core Web Vitals son las metricas que Google usa para medir experiencia de usuario: LCP (Largest Contentful Paint -- que tan rapido carga el contenido principal), CLS (Cumulative Layout Shift -- cuanto se mueve el layout mientras carga), e INP (Interaction to Next Paint -- que tan rapido responde a interacciones).
Google los usa como factor de ranking. No es el factor mas importante, pero un sitio con Core Web Vitals malos tiene un techo de posicionamiento.
Como detectarlo:
En Google Search Console ve a Experiencia > Core Web Vitals. Ahi ves que paginas tienen problemas y de que tipo.
Para diagnostico rapido en local:
# Instala Lighthouse CLI
npm install -g lighthouse
# Audita tu sitio
lighthouse https://tudominio.com --only-categories=performance --output=jsonComo arreglarlo:
Los problemas mas comunes en blogs de Next.js:
// MAL: imagen sin dimensiones (causa CLS)
<img src="/hero.jpg" alt="Hero" />
// BIEN: Image de Next.js con dimensiones explicitas
import Image from "next/image";
<Image src="/hero.jpg" alt="Hero" width={1200} height={630} priority />Para LCP, la imagen principal del post debe tener el atributo priority en next/image. Eso le dice a Next.js que haga preload de esa imagen.
Para fuentes, usa next/font en lugar de <link> a Google Fonts para evitar layout shift:
// MAL: (causa CLS al cargar la fuente)
// <link href="https://fonts.googleapis.com/..." rel="stylesheet" />
// BIEN: next/font (zero layout shift)
import { Inter } from "next/font/google";
const inter = Inter({ subsets: ["latin"], display: "swap" });Como verificar que quedo bien:
Ve a PageSpeed Insights (pagespeed.web.dev) y pega tu URL. Te da los Core Web Vitals reales (de usuarios reales en Chrome) y los de laboratorio.
Error 7: No configurar Google Search Console ni Bing Webmaster Tools
Sin Google Search Console no sabes si Google esta crawleando tu sitio, si hay errores de indexacion, cuales keywords te generan impresiones, ni que paginas tienen problemas de Core Web Vitals. Estas operando a ciegas.
Como detectarlo:
Entra a search.google.com/search-console. Si no tienes una propiedad configurada, no lo tienes.
Como arreglarlo:
- Agrega tu dominio como propiedad en GSC
- Verifica via registro DNS TXT (la forma mas confiable, no depende de archivos en tu servidor)
- Ve a
Sitemapsy enviahttps://tudominio.com/sitemap.xml - Espera 48-72 horas para que GSC empiece a mostrar datos
Para Bing Webmaster Tools (webmaster.bing.com), el proceso es identico. Vale la pena porque Bing alimenta a DuckDuckGo y otros buscadores. Una vez que tienes GSC verificado, Bing tiene una opcion para importar tu configuracion directamente desde GSC.
Como verificar que quedo bien:
En GSC ve a Descripcion general. Si ves impresiones y clics (aunque sean cero), la propiedad esta correctamente configurada. Si ves un error de verificacion, el registro DNS no esta propagado todavia.
Error 8: URLs no amigables para SEO
URLs como /blog/p?id=1247 o /post/2024/03/07/untitled-draft-copy-final-v2 son un problema. Google puede indexarlas, pero no le dan contexto sobre el contenido.
Como detectarlo:
Revisa las URLs de tu blog. Una URL amigable para SEO:
- Contiene la keyword principal del post
- Es legible por humanos
- Usa guiones medios como separadores
- No tiene parametros de query cuando no son necesarios
- No tiene fechas que la hagan parecer desactualizada rapidamente
Como arreglarlo:
En Next.js, el slug de la URL viene del nombre del folder en app/blog/[slug]. Asegurate de que los slugs de tus posts sean descriptivos:
// MAL: slug generico
{ slug: "post-1" }
// BIEN: slug con keyword
{ slug: "errores-seo-blog-desarrolladores" }Si ya tienes URLs malas en produccion y tienes trafico o links entrantes, no las cambies sin configurar redirects 301. Un redirect mal hecho destruye el link juice acumulado.
Como verificar que quedo bien:
Busca tus posts en Google con site:tudominio.com. Si las URLs que aparecen son limpias y descriptivas, estas bien.
Error 9: No tener HTTPS en produccion
En 2026 esto deberia ser obvio, pero todavia aparece en auditorias. Google marca los sitios HTTP como "no seguros" en Chrome y los rankea por debajo de equivalentes HTTPS.
Como detectarlo:
# Verifica que HTTPS funciona y hace redirect desde HTTP
curl -I http://tudominio.com
# El Location header debe apuntar a https://Tambien verifica que HSTS esta configurado para que los navegadores recuerden usar HTTPS directamente:
curl -I https://tudominio.com | grep -i strict-transportEl analizador de HTTP headers de datahogo revisa HSTS y todos los headers de seguridad de tu sitio en segundos. Te dice si HSTS esta configurado correctamente, si el max-age es suficiente, y si tienes otros headers de seguridad faltantes que afectan tanto la seguridad como el SEO.
Como arreglarlo:
Si estas en Vercel, HTTPS es automatico. Solo asegurate de que el redirect de HTTP a HTTPS esta activo en la configuracion del dominio.
Para HSTS en Next.js, configuralo en next.config.ts:
// next.config.ts
const nextConfig = {
async headers() {
return [
{
source: "/(.*)",
headers: [
{
key: "Strict-Transport-Security",
value: "max-age=63072000; includeSubDomains; preload",
},
],
},
];
},
};Como verificar que quedo bien:
Corre curl -I http://tudominio.com y confirma que recibes un 301 con Location: https://tudominio.com. Luego verifica el header Strict-Transport-Security en la respuesta HTTPS.
Error 10: Contenido thin o duplicado
Contenido thin es contenido que existe pero no tiene valor real: posts de 200 palabras sin ejemplos concretos, paginas de categoria vacias, tags que generan URLs con una sola entrada.
Google no los penaliza con una sancion manual, pero los rankea muy abajo. Peor, si tienes muchas paginas thin, afectan la percepcion general de calidad de tu dominio.
Como detectarlo:
# Revisa el word count aproximado de tus posts
curl -s https://tudominio.com/blog/tu-post | \
sed 's/<[^>]*>//g' | \
wc -wBusca en GSC paginas con muchas impresiones pero CTR muy bajo (menos de 0.5%). Eso sugiere que Google las muestra pero no las considera lo suficientemente buenas para el top.
Como arreglarlo:
Tienes dos opciones:
-
Mejorar el contenido: Agregar ejemplos concretos, profundidad tecnica, datos reales. Un post de 400 palabras bien explicado es mejor que uno de 1500 con relleno, pero un post de 400 palabras sobre un tema que merece 1500 se ve incompleto.
-
Consolidar o noindexar: Si tienes paginas de tags o categorias que generan contenido thin automaticamente, considera agregarles
noindexo consolidar el contenido en una sola pagina mas completa.
// Para paginas de archivo/tag que no aportan valor SEO
export const metadata = {
robots: {
index: false,
follow: true,
},
};Como verificar que quedo bien:
En GSC ve a Cobertura y filtra por Excluidas. Las paginas con noindex deben aparecer ahi. Para las paginas que mejoraste, solicita reindexacion desde la herramienta de inspeccion de URLs.
Error 11: No tener diseno mobile-first
Google usa mobile-first indexing. Eso significa que la version movil de tu sitio es la que Google crawlea y usa para determinar rankings. Si tu blog se ve bien en desktop pero el texto es ilegible en celular, eso afecta tu posicionamiento.
Como detectarlo:
Abre Chrome DevTools, activa el modo responsive (Ctrl+Shift+M / Cmd+Shift+M), y navega tu blog en viewport de 375px de ancho. Busca:
- Texto que se sale del viewport
- Botones demasiado pequenos para tocar
- Imagenes que se desbordan
- Layout que se rompe
Como arreglarlo:
En Tailwind, el enfoque mobile-first significa que las clases base son para movil y los breakpoints son para pantallas mas grandes:
// MAL: piensas en desktop y luego adaptas a movil
<article className="w-[800px] md:w-full px-8 md:px-4">
// BIEN: empieza con movil
<article className="w-full px-4 md:px-8 max-w-3xl mx-auto">Para tipografia, usa tamanios relativos que escalen bien:
/* MAL: tamanio fijo que puede ser demasiado grande en movil */
.prose { font-size: 18px; }
/* BIEN: responsive con clamp o breakpoints */
.prose { font-size: clamp(1rem, 2.5vw, 1.125rem); }Como verificar que quedo bien:
Usa el Mobile-Friendly Test de Google. En GSC tambien puedes ver el reporte de Usabilidad en dispositivos moviles que lista paginas con problemas especificos.
Error 12: Ignorar los errores de cobertura en GSC
Google Search Console te dice exactamente que paginas indexo, cuales intento indexar y no pudo, y cuales decidio excluir. La mayoria de los devs lo configura y nunca mas lo abren.
Como detectarlo:
En GSC ve a Indexacion > Paginas. Ahi vas a ver cuatro categorias:
- Indexadas: Todo bien
- Con advertencias: Indexadas pero con algo raro (canonical apuntando a otra URL, etc.)
- Excluidas: No indexadas, con la razon especifica
- Con errores: GSC intento indexar pero no pudo
Como arreglarlo:
Los errores mas comunes y sus causas:
| Error en GSC | Causa probable | Fix |
|---|---|---|
| URL enviada pero bloqueada por robots.txt | robots.txt tiene Disallow para esa URL | Actualiza robots.txt |
| Pagina con redireccion | La URL en el sitemap redirige a otra | Actualiza el sitemap con la URL final |
| URL duplicada, Google eligio una diferente | Canonical inconsistente | Arregla el canonical tag |
| Error 404 | La pagina fue eliminada o la URL cambio | Agrega redirect 301 o elimina del sitemap |
| Rastreada, actualmente no indexada | Google la visito pero decidio no indexarla | Mejora el contenido, solicita reindexacion |
Como verificar que quedo bien:
Despues de aplicar fixes, usa la herramienta de inspeccion de URLs en GSC (la lupa en la parte superior) para solicitar reindexacion de paginas especificas. Los cambios pueden tardar de 24 horas a dos semanas en reflejarse.
Como auditar tu blog en 30 minutos (checklist final)
Aqui el orden de operaciones si quieres hacer la auditoria ahora:
Paso 1 (5 min): Verificacion general de seguridad y headers
Corre el Score de seguridad y configuracion de datahogo en tu dominio. Te da una evaluacion rapida de headers, HTTPS, y configuracion general. Es el estado base de tu sitio antes de entrar al SEO especifico.
Paso 2 (5 min): Estado de indexacion
# Cuantas paginas tiene Google de tu sitio
# Busca esto en Google directamente:
# site:tudominio.comSi el numero es muy bajo comparado con tus posts publicados, tienes un problema de indexacion.
Paso 3 (5 min): Sitemap y robots.txt
curl https://tudominio.com/sitemap.xml | grep "<loc>" | wc -l
curl https://tudominio.com/robots.txtEl numero de <loc> debe coincidir (aproximadamente) con tu numero de posts. El robots.txt no debe tener Disallow sobre rutas que quieres indexar.
Paso 4 (5 min): Meta tags y canonical
# Reemplaza con una de tus URLs reales
curl -s https://tudominio.com/blog/tu-post | grep -E "canonical|og:title|og:description|<title>"Confirma que hay canonical, og:title, og:description y title presentes.
Paso 5 (5 min): Core Web Vitals
Pega tu URL en PageSpeed Insights. Fijate en LCP (debe ser menos de 2.5s), CLS (debe ser menos de 0.1), e INP (debe ser menos de 200ms).
Paso 6 (5 min): GSC
Si ya tienes GSC configurado, abre Indexacion > Paginas y cuenta cuantos errores tienes. Si no tienes GSC, configuralo ahora, es el paso que mas retorno da por el tiempo invertido.
La neta es que la mayoria de estos errores se arreglan en una tarde. No requieren conocimiento avanzado de SEO, solo configuracion correcta. Y una vez que estan arreglados, el efecto es acumulativo: Google crawlea mejor, indexa mas rapido, y el contenido que ya tienes empieza a posicionarse como merece.
Si quieres profundizar en la implementacion de SEO tecnico en Next.js, los posts de Metadata API y Open Graph y sitemap automatico en NextJS cubren el codigo con mas detalle.
Preguntas frecuentes
Por que mi blog no aparece en Google aunque esta publicado?
Las razones mas comunes son: robots.txt que bloquea el crawl, no haber enviado el sitemap en Google Search Console, canonical URLs mal configuradas que apuntan a otra pagina, o que Google todavia no ha crawleado tu sitio. Verifica primero en GSC con la herramienta de inspeccion de URLs.
Como saber si Google esta indexando mi sitio web?
La forma mas directa es buscar site:tudominio.com en Google. Si no aparece ninguna pagina, no estas indexado. La forma correcta es entrar a Google Search Console, ir a Cobertura o Indexacion, y revisar cuantas paginas estan indexadas y cuales tienen errores.
Que es un sitemap.xml y para que sirve?
Un sitemap.xml es un archivo que le dice a Google y otros buscadores que URLs existen en tu sitio, cuando se actualizaron y que tan importantes son entre si. Sin sitemap, Google puede tardar semanas en descubrir paginas nuevas. Con sitemap bien enviado desde Search Console, el crawl es mas rapido y predecible.
Como configurar Google Search Console paso a paso?
Entra a search.google.com/search-console, agrega una propiedad con tu dominio, verifica la propiedad (lo mas facil es con el registro TXT en tu DNS o el archivo HTML en tu servidor), y luego ve a Sitemaps para enviar tu sitemap.xml. Eso es todo para la configuracion basica.
Que son las canonical URLs y cuando usarlas?
Una canonical URL es el tag <link rel='canonical'> que le dice a Google cual es la version 'oficial' de una pagina cuando el mismo contenido esta accesible en multiples URLs. La usas cuando tienes parametros de URL, versiones con y sin www, o paginacion que podria tratarse como contenido duplicado.
Que es contenido thin y por que Google lo penaliza?
Contenido thin es contenido que tiene pocas palabras, poca profundidad, o que no responde bien la intencion de busqueda. Google no lo penaliza con una sancion manual, pero lo rankea en posiciones bajas porque no aporta valor real al usuario. Posts de menos de 300 palabras sin datos ni ejemplos concretos son el caso mas comun.
Articulos relacionados
Indexar tu Blog en Google: Guia Tecnica
Como indexar un blog en Google Search Console: sitemap, robots.txt, canonical URLs, structured data, Core Web Vitals e IndexNow. Guia tecnica completa.
IndexNow en Next.js: guía completa para indexación rápida
Implementa IndexNow en tu app Next.js con TypeScript. Aprende a generar tu API key, enviar URLs a Bing automáticamente y configurar el webhook de Vercel.
SEO en Next.js: Metadata API, Open Graph y Sitemap
Optimiza el SEO de tu app Next.js. Metadata API, Open Graph, Twitter Cards, sitemap dinámico, robots.txt y structured data con JSON-LD.