4dim / Notas
Dos líneas que faltaban: metadataBase y noindex
Sin metadataBase, Next emite canónicas relativas y el hreflang de todo el sitio queda invalidado sin aviso. Y bloquear en robots.txt no desindexa nada: impide que Google lea el noindex. Dos fallos silenciosos, dos líneas, y cómo comprobarlos.
Dos líneas
Si tu web tiene páginas en dos idiomas, o una zona privada con contraseña, esta nota te sirve. Cuenta dos fallos de SEO técnico y cómo se arreglan; o sea, de la parte del posicionamiento que depende del código, no de los textos.
Ninguno daba error ni cambiaba nada visible, y llevaban meses anulando señales que creíamos mandarle a Google. En los dos faltaba lo mismo: una pieza de configuración que Next.js no exige y el buscador sí. Cada uno se arregló con una línea.
Sin metadataBase, el hreflang no existe
Next.js permite declarar la dirección canónica de cada página, la que el buscador debe tomar como la buena. También las alternativas por idioma, que se declaran con hreflang: le dicen a Google que /legal/privacidad y /legal/privacy son la misma página en dos idiomas. Lo declaramos en las seis páginas legales bilingües.
Pero sin la opción metadataBase en la configuración, Next escribe esas direcciones en forma relativa: href="/legal/privacy". Una relativa empieza por barra y no dice de qué sitio es.
La norma de hreflang pide direcciones completas, con el dominio delante. Una relativa no es un error de escritura: se ignora sin avisar. Seis pares de idioma anulados de golpe, sin rastro en el build ni en la pantalla.
Una línea lo corrigió: metadataBase: new URL("https://4dimntion.com"). Quedaron arregladas a la vez las diez rutas del sitio público y las seis páginas legales con su pareja de idioma.
Lo que Google ignora en silencio se ve igual que lo que Google acepta. Solo el HTML final dice cuál de los dos es.
El noindex no va en robots.txt
El segundo fallo estaba en la consola, la zona privada del sitio. Google podía mostrar entre sus resultados la página de acceso, la de alta, la del enlace de invitación y la de recuperar contraseña.
La corrección que parece obvia es la equivocada: bloquearlas en robots.txt con Disallow. Ese archivo instruye a los rastreadores, los programas que recorren la web. Disallow les prohíbe visitar la dirección.
Ahí está la trampa. Si el rastreador no entra, tampoco lee la instrucción de no indexar que lleve dentro. Y si alguien la enlaza desde otro sitio, Google la indexa igual: sin descripción y con el título que deduzca del enlace. Aparece, y no puedes controlar cómo.
Para que no se indexe hay que dejar que el rastreador la vea con noindex en su metadata, los datos que la página declara sobre sí misma. En Next basta ponerlo en el layout de la consola: lo heredan todas sus rutas. Una línea, robots: { index: false }.
Las rutas con un token en la URL
Entre esas páginas había dos especialmente delicadas: la de aceptar una invitación y la de restablecer la contraseña. Las dos llevan un token en la propia dirección, una clave larga de un solo uso.
Un token gastado ya no sirve. Pero una de esas direcciones indexada le enseña a cualquiera cómo son las rutas del sitio. Y un token vivo, enlazado por error, sería una puerta abierta en un resultado de búsqueda.
Son las primeras que tienen que llevar noindex, y las primeras que uno olvida: nadie las visita a propósito.
Cómo se comprueba
- Abrir el código fuente de una página bilingüe y buscar
hreflang. Si elhrefempieza por/, no vale. - Abrir el código fuente de una página con sesión y buscar
robots. Si no aparecenoindex, esa página es indexable. - En Search Console, abrir el informe de páginas indexadas. Si sale
/login, o algo contokenen la dirección, ya está pasando.
Qué hacer entonces
- Declarar
metadataBaseel primer día, antes de la primera dirección canónica. - Poner
noindexen la metadata de todo lo que tenga sesión o token, heredado desde el layout, para que ninguna ruta nueva se quede fuera. - No usar
robots.txtpara esconder: sirve para lo que no quieres que se rastree y no te importa que se conozca. - Mirar el HTML que sale, no la configuración que se escribió.
Esta nota sale de nuestro trabajo en Desarrollo web.