🎯 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:
- ✅ Obtener las URLs originales (antes de ser despublicadas)
- ✅ Enviarlas a Google Search Console para solicitar desindexación
- ✅ 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
- Accede a Google Search Console
- Ve a Herramientas y informes antiguos → Eliminaciones
- Click en Nueva solicitud
- Selecciona Eliminar temporalmente URL
- 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:
- Inspecciona la URL en Search Console
- 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> <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.phpa 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:
- Ejecuta
borradores.php→ Copia URLs - Implementa código 410 → Verifica respuestas
- Solicita desindexación en GSC → Espera confirmación
- 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.