Explorar las pruebas de la auditoría

Seis casos HTTP locales, no un análisis de tu web. Las respuestas anteriores y corregidas se prueban localmente; indexación, tráfico y posiciones en Google siguen sin conocerse.

La prioridad responde al objetivo del ejemplo; no es una puntuación SEO universal. Una respuesta correcta no demuestra indexación.

A01 · La página pública contiene noindex

Prioridad: Alta

Observación
GET /launch devuelve 200 y una meta robots noindex. Se pretende una página pública apta para búsqueda.
Por qué importa
La directiva contradice ese objetivo. Su presencia está confirmada; no sabemos si Google la ha visto.
Acción propuesta
Retira la directiva involuntaria de la plantilla pública. Revisa también cabeceras y HTML renderizado.
Responsable
Desarrollador web
Criterio de aceptación
/fixed/launch devuelve 200 sin noindex. Repite la prueba en producción y realiza la Inspección de URLs autorizada por separado.

Confirmado en este caso local; alcance en producción y resultados de búsqueda sin verificar.

Antes

GET /launch
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><meta name="robots" content="noindex"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Después

GET /fixed/launch
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/fixed/launch"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A02 · Robots impide leer la exclusión

Prioridad: Alta

Observación
robots.txt bloquea /blocked/; /blocked/page contiene noindex. Se busca excluir de búsqueda, no restringir acceso.
Por qué importa
Un rastreador que respeta las reglas no puede leer la directiva. Robots no sustituye autenticación.
Acción propuesta
Permite rastrear la página y conserva noindex. Protege contenido privado con autenticación.
Responsable
Responsable de plataforma
Criterio de aceptación
/fixed/blocked/page está fuera del prefijo bloqueado y mantiene noindex. Verifica las reglas reales y observa la indexación aparte.

Confirmado en este caso local; alcance en producción y resultados de búsqueda sin verificar.

Antes

GET /robots.txt
HTTP 200
Content-Type: text/plain; charset=utf-8

User-agent: *
Disallow: /blocked/


────────

GET /blocked/page
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><meta name="robots" content="noindex"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Después

GET /robots.txt
HTTP 200
Content-Type: text/plain; charset=utf-8

User-agent: *
Disallow: /blocked/


────────

GET /fixed/blocked/page
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><meta name="robots" content="noindex"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A03 · La redirección permanente termina en error

Prioridad: Alta

Observación
/old-guide devuelve 301 a /missing-guide, que responde 404. Se supone que /guide es un sustituto relevante.
Por qué importa
La ruta no entrega el contenido previsto. Una redirección no demuestra que el destino funcione.
Acción propuesta
Redirige directamente al sustituto relevante y actualiza enlaces internos. No envíes todas las páginas eliminadas a la portada.
Responsable
Desarrollador de rutas
Criterio de aceptación
/fixed/old-guide devuelve un 301 y después /guide con 200 y contenido esperado. Inspecciona toda la cadena tras desplegar.

Confirmado en este caso local; alcance en producción y resultados de búsqueda sin verificar.

Antes

GET /old-guide
HTTP 301
Location: /missing-guide



────────

GET /missing-guide
HTTP 404
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title></head><body><h1>Not found</h1></body></html>

Después

GET /fixed/old-guide
HTTP 301
Location: /guide



────────

GET /guide
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A04 · Canonical apunta a contenido ajeno

Prioridad: Media

Observación
/variant declara /other-topic como canonical, aunque duplica /guide.
Por qué importa
La preferencia contradice la relación entre contenidos. No revela la URL canónica elegida por Google.
Acción propuesta
Confirma equivalencia y alinea canonical, enlaces internos y sitemap con /guide. Conserva páginas con necesidades distintas.
Responsable
Responsable SEO y desarrollador
Criterio de aceptación
/fixed/variant declara /guide y el destino funciona. Comprueba la elección de Google por separado cuando tengas acceso.

Confirmado en este caso local; alcance en producción y resultados de búsqueda sin verificar.

Antes

GET /variant
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/other-topic"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Después

GET /fixed/variant
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

A05 · La página ausente responde con éxito

Prioridad: Media

Observación
/gone devuelve 200 con un encabezado Not found. No hay sustituto adecuado.
Por qué importa
Es una discrepancia entre contenido de error y estado correcto: candidata a soft 404, no clasificación observada de Google.
Acción propuesta
Devuelve el estado de recurso ausente y elimina enlaces internos obsoletos. Mantén una página de error útil.
Responsable
Desarrollador web
Criterio de aceptación
/fixed/gone devuelve 404 con el error. Una observación posterior de Search Console es una prueba independiente.

Confirmado en este caso local; alcance en producción y resultados de búsqueda sin verificar.

Antes

GET /gone
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title></head><body><h1>Not found</h1></body></html>

Después

GET /fixed/gone
HTTP 404
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title></head><body><h1>Not found</h1></body></html>

A06 · El control correcto no necesita arreglos especulativos

Prioridad: Sin cambios

Observación
/guide devuelve 200, se declara canonical y estas reglas robots no la bloquean. Esta respuesta no contiene noindex.
Por qué importa
Pasa estos controles locales, pero no prueba calidad, renderizado, descubrimiento, indexación ni posiciones.
Acción propuesta
Registra el control aprobado. Investiga otros indicios solo cuando una pregunta concreta lo justifique.
Responsable
Revisor de auditoría
Criterio de aceptación
Las respuestas anterior y posterior son idénticas. Conserva la prueba correcta sin inventar problemas para aumentar el recuento.

Confirmado en este caso local; alcance en producción y resultados de búsqueda sin verificar.

Antes

GET /guide
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Después

GET /guide
HTTP 200
Content-Type: text/html; charset=utf-8

<!doctype html><html lang="en"><head><title>Local audit fixture</title><link rel="canonical" href="/guide"></head><body><h1>Guide</h1><p>Local practice content.</p></body></html>

Ejecutar los casos

Ejecutar los casos

Seis casos HTTP locales, no un análisis de tu web. Las respuestas anteriores y corregidas se prueban localmente; indexación, tráfico y posiciones en Google siguen sin conocerse.

Python 3.10 o posterior. Extrae el ZIP en una carpeta local. La verificación inicia un servidor temporal de bucle local, prueba todos los casos, imprime JSON y termina. No consulta webs externas.

python3 audit_lab.py --verify

Para inspección manual, inicia el servidor con el comando inferior, abre las URL locales y deténlo con Ctrl+C. Elige otro puerto si 8765 está ocupado.

python3 audit_lab.py --port 8765

http://127.0.0.1:8765/robots.txt

http://127.0.0.1:8765/launch

http://127.0.0.1:8765/fixed/launch

http://127.0.0.1:8765/blocked/page

http://127.0.0.1:8765/fixed/blocked/page

http://127.0.0.1:8765/old-guide

http://127.0.0.1:8765/missing-guide

http://127.0.0.1:8765/fixed/old-guide

http://127.0.0.1:8765/guide

http://127.0.0.1:8765/variant

http://127.0.0.1:8765/fixed/variant

http://127.0.0.1:8765/gone

http://127.0.0.1:8765/fixed/gone

http://127.0.0.1:8765/guide

http://127.0.0.1:8765/guide

Los comandos y rutas son identificadores técnicos; el texto del informe está traducido.

Resultado de indexación: desconocido

Resultado de indexación: desconocido