🎯 Objetivo del Script

El script borradores.php está diseñado para un flujo de trabajo SEO específico: identificar y procesar URLs de contenido que fue previamente publicado y posteriormente movido a borrador o papelera, con el fin de:

  1. ✅ Obtener las URLs originales (antes de ser despublicadas)
  2. ✅ Enviarlas a Google Search Console para solicitar desindexación
  3. ✅ Configurar respuestas HTTP 410 (Gone) para indicar eliminación permanente

📊 ¿Por Qué es Importante Este Proceso?

Problema SEO

Cuando mueves contenido publicado a borrador o papelera en WordPress:

  • ❌ La URL devuelve 404 (Not Found)
  • ❌ Google sigue teniendo la página en su índice
  • ❌ Los usuarios pueden llegar a páginas inexistentes desde búsquedas
  • ❌ Desperdicias crawl budget en URLs muertas
  • ❌ La página sigue apareciendo en resultados de búsqueda (mala experiencia)

Solución Correcta: HTTP 410

El código 410 Gone es superior al 404 porque:

  • ✅ Indica que el recurso existió pero fue eliminado permanentemente
  • ✅ Google lo procesa más rápido que un 404
  • ✅ Acelera la desindexación automática
  • ✅ Es la señal correcta según las directrices de Google

🔄 Flujo de Trabajo Completo

FASE 1: Extracción de URLs 📋

1.1. Ejecutar el Script

# Subir borradores.php a la raíz de WordPress
https://tusitioweb.com/borradores.php

1.2. Obtener el Listado

El script genera:

  • Tabla visual con todos los posts en borrador/papelera
  • Área de texto con URLs limpias (una por línea)
  • Botón para copiar todo al portapapeles

Ejemplo de salida:

https://tusitioweb.com/articulo-eliminado-1/
https://tusitioweb.com/guia-antigua/
https://tusitioweb.com/producto-descatalogado/

1.3. Filtrado Importante ⚠️

Revisar manualmente el listado para identificar:

  • ✅ URLs que SÍ estuvieron publicadas previamente (estas necesitan desindexación)
  • ❌ URLs de borradores que NUNCA se publicaron (no necesitan desindexación)

FASE 2: Solicitud de Desindexación a Google 🔍

2.1. Vía Google Search Console (Método Recomendado)

Opción A: Eliminación Masiva de URLs

  1. Accede a Google Search Console
  2. Ve a Herramientas y informes antiguosEliminaciones
  3. Click en Nueva solicitud
  4. Selecciona Eliminar temporalmente URL
  5. Pega las URLs (máximo 100 por solicitud)

Opción B: API de Indexación de Google (Para volúmenes grandes)

# Usa la API de Google Indexing para solicitudes programáticas
# Requiere: cuenta de servicio GCP + activar API

2.2. Vía Herramienta de Inspección de URL

Para casos específicos:

  1. Inspecciona la URL en Search Console
  2. Click en Solicitar desindexación

Nota: Las solicitudes manuales tardan 24-48 horas en procesarse.


FASE 3: Implementar Código HTTP 410 ⚙️

3.1. Método Recomendado: Plugin + functions.php

Opción A: Usar un Plugin de Redirecciones

Plugins recomendados:

  • Redirection (gratis, robusto)
  • Safe Redirect Manager
  • Simple 301 Redirects

Configuración:

URL origen: /articulo-eliminado-1/
Código HTTP: 410 Gone

Opción B: Código en functions.php (Más control)

/**
 * Devolver 410 Gone para URLs específicas de contenido eliminado
 * Añadir al functions.php del tema hijo
 */
add_action('template_redirect', 'vm_handle_410_gone_urls');

function vm_handle_410_gone_urls() {
    // Array de URLs que deben devolver 410
    $gone_urls = array(
        '/articulo-eliminado-1/',
        '/guia-antigua/',
        '/producto-descatalogado/',
        // ... añade todas las URLs del script
    );
    
    // Obtener la URI actual
    $current_uri = $_SERVER['REQUEST_URI'];
    $current_uri = rtrim($current_uri, '/') . '/'; // Normalizar
    
    // Verificar si la URL actual está en el array
    if (in_array($current_uri, $gone_urls)) {
        status_header(410);
        nocache_headers();
        
        // Plantilla personalizada para 410
        echo '<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="robots" content="noindex, nofollow">
    <title>410 - Contenido Eliminado Permanentemente</title>
    <style>
        body {
            font-family: system-ui, sans-serif;
            text-align: center;
            padding: 50px;
            background: #f5f5f5;
        }
        .container {
            max-width: 600px;
            margin: 0 auto;
            background: white;
            padding: 40px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 { color: #d32f2f; }
        p { color: #666; line-height: 1.6; }
        a { color: #1976d2; text-decoration: none; }
    </style>
</head>
<body>
    <div class="container">
        <h1>410 - Contenido Eliminado</h1>
        <p>Esta página existió anteriormente pero ha sido <strong>eliminada permanentemente</strong> de nuestro sitio web.</p>
        <p><a href="/">← Volver a la página principal</a></p>
    </div>
</body>
</html>';
        exit;
    }
}

3.2. Método Alternativo: .htaccess (Apache)

# Añadir al archivo .htaccess
# Devolver 410 Gone para URLs específicas

RewriteEngine On

# Lista de URLs eliminadas permanentemente
RewriteRule ^articulo-eliminado-1/?$ - [R=410,L]
RewriteRule ^guia-antigua/?$ - [R=410,L]
RewriteRule ^producto-descatalogado/?$ - [R=410,L]

# Plantilla personalizada para 410
ErrorDocument 410 /410.html

3.3. Verificar la Implementación

# Comprobar que la URL devuelve 410
curl -I https://tusitioweb.com/articulo-eliminado-1/

# Respuesta esperada:
HTTP/2 410

Herramientas online:

  • https://httpstatus.io/
  • Chrome DevTools → Network → Headers

FASE 4: Monitoreo y Validación 📈

4.1. Verificar Desindexación

Método 1: Búsqueda site:

site:tusitioweb.com "título del artículo eliminado"

Método 2: Google Search Console

  • Sección Cobertura
  • Filtrar por "Excluidas" → "410 Gone"

4.2. Tiempos Esperados

Acción Tiempo Esperado
Solicitud en GSC procesada 24-48 horas
URL desaparece del índice 1-4 semanas
Con 410 activo 3-7 días (más rápido)

4.3. Seguimiento Continuo

# Cada semana, verificar:
1. ¿Las URLs siguen devolviendo 410? ✓
2. ¿Han desaparecido de Google? ✓
3. ¿Hay nuevos borradores para procesar? ✓

🛠️ Herramientas Complementarias

Script de Verificación Masiva

#!/bin/bash
# verificar-410.sh - Comprobar múltiples URLs

while IFS= read -r url; do
    status=$(curl -o /dev/null -s -w "%{http_code}" "$url")
    echo "$url → $status"
done < urls.txt

Exportar desde el Script

El script ya incluye:

  • ✅ Botón de copia al portapapeles
  • ✅ Formato de una URL por línea
  • ✅ Listo para pegar en herramientas

⚠️ Consideraciones Importantes

¿410 o 301?

Situación Código Correcto
Contenido eliminado permanentemente 410 Gone
Contenido movido a otra URL 301 Redirect
Contenido fusionado con otro 301 Redirect
Contenido temporalmente no disponible 503 Service Unavailable

Casos Especiales

❌ NO uses 410 si:

  • El contenido será republicado en el futuro
  • Existe una página similar donde redirigir (usa 301)
  • Es contenido estacional (deja 404 o usa 301)

✅ SÍ usa 410 si:

  • Eliminaste productos descatalogados
  • Borraste contenido duplicado/thin
  • Removiste contenido obsoleto sin reemplazo
  • Limpieza de contenido de baja calidad

📋 Checklist Completo

Antes de Ejecutar

  • [ ] Backup de la base de datos
  • [ ] Lista de posts a eliminar/desindexar
  • [ ] Verificar que estuvieron publicados previamente

Durante la Ejecución

  • [ ] Subir borradores.php a la raíz de WordPress
  • [ ] Ejecutar y copiar el listado de URLs
  • [ ] Guardar el listado en archivo de texto
  • [ ] Eliminar borradores.php del servidor 🔴

Configuración 410

  • [ ] Elegir método (plugin, functions.php o .htaccess)
  • [ ] Implementar código 410 para las URLs
  • [ ] Verificar con curl o herramienta online
  • [ ] Probar 3-5 URLs aleatorias manualmente

Desindexación Google

  • [ ] Solicitar eliminación en Google Search Console
  • [ ] Dividir en lotes de 100 URLs si es necesario
  • [ ] Guardar confirmaciones de Google

Seguimiento (1 semana después)

  • [ ] Verificar que URLs devuelven 410
  • [ ] Comprobar desaparición del índice con site:
  • [ ] Revisar informe de cobertura en GSC
  • [ ] Documentar resultados

Seguimiento (1 mes después)

  • [ ] Confirmar desindexación completa
  • [ ] Verificar que no hay errores de rastreo
  • [ ] Actualizar documentación interna

🎓 Mejores Prácticas SEO

1. Comunicación Clara

<!-- En la página 410, incluye: -->
- Por qué se eliminó el contenido
- Sugerencias de contenido relacionado
- Enlace a la página principal
- Fecha de eliminación (opcional)

2. Documentación

Mantén un registro de:
- URLs eliminadas y fechas
- Razón de la eliminación
- Capturas del tráfico antes de eliminar
- Confirmaciones de Google

3. Alternativas Antes de Eliminar

Considera primero:
¿Puedo actualizar el contenido?
¿Puedo fusionarlo con otro artículo?
¿Puedo redirigirlo a algo relevante?
¿Realmente necesito eliminarlo?

🚀 Automatización Avanzada

Integración con WP-CLI

# Listar todos los posts en papelera
wp post list --post_status=trash --format=csv

# Eliminar permanentemente después de 410
wp post delete $(wp post list --post_status=trash --format=ids) --force

Monitoreo Programático

/**
 * Cron job para notificar nuevos borradores
 */
add_action('transition_post_status', 'vm_notify_unpublished_posts', 10, 3);

function vm_notify_unpublished_posts($new_status, $old_status, $post) {
    if ($old_status === 'publish' && in_array($new_status, ['draft', 'trash'])) {
        // Enviar email al admin con la URL
        $url = get_permalink($post->ID);
        wp_mail(
            get_option('admin_email'),
            'Contenido despublicado: requiere acción 410',
            "URL a procesar: $url"
        );
    }
}

📚 Recursos Adicionales

Documentación Oficial

Plugins Recomendados

  • Redirection - Gestión completa de redirecciones
  • SEO Framework - Control granular de meta robots
  • WP 410 - Plugin específico para 410 Gone

💡 Resumen Ejecutivo

El flujo completo en 4 pasos:

  1. Ejecuta borradores.php → Copia URLs
  2. Implementa código 410 → Verifica respuestas
  3. Solicita desindexación en GSC → Espera confirmación
  4. Monitorea durante 1 mes → Documenta resultados

Resultado: Índice limpio, crawl budget optimizado, mejor experiencia de usuario.


🔐 Recordatorio de Seguridad: Siempre elimina borradores.php del servidor después de usarlo. Es una herramienta de auditoría puntual, no debe quedar expuesta.