🎯 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 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.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.