Guía práctica: Reparar enlaces permanentes (permalinks) en WordPress
Esta guía paso a paso explica cómo diagnosticar y reparar problemas comunes con los enlaces permanentes en WordPress: URLs 404, problemas con redirecciones, errores del servidor y URLs «bonitas» que no funcionan.
Índice
- Copias de seguridad y precauciones
- ¿Qué son los enlaces permanentes y por qué fallan?
- Soluciones rápidas desde el panel de WordPress
- Revisar y reparar el archivo
.htaccess(Apache) - Configuración típica para Nginx
- Permisos de archivos y propietarios
- Usar WP-CLI para diagnosticar y reparar
- Problemas con themes o plugins
- Casos avanzados: custom post types y rewrite rules
- Checklist final y recomendaciones
1. Copias de seguridad y precauciones
Antes de tocar archivos o base de datos:
- Haz una copia de seguridad completa (archivos + base de datos).
- Trabaja en staging si es posible.
- Activa el modo de mantenimiento si tu sitio es crítico.
2. ¿Qué son los enlaces permanentes y por qué fallan?
Los permalinks son las reglas que convierten una URL legible en la consulta que WordPress entiende. Fallan por:
- Error o ausencia del archivo
.htaccess(Apache). - Configuración de Nginx sin reglas de reescritura.
- Permisos de archivos inválidos.
- Conflictos con plugins o themes que alteren
rewrite_rules. - Cachés (Varnish, plugins de cache, CDN) que sirven rutas antiguas.
3. Soluciones rápidas desde el panel de WordPress
- Entra a Ajustes → Enlaces permanentes.
- Sin cambiar nada, haz clic en Guardar cambios. Esto fuerza a WordPress a reescribir las reglas.
- Prueba varias URLs internas (entradas, páginas, categorías).
Si esto lo arregla: el problema era normalmente la falta de actualización de las reglas o un .htaccess que no era editable por WordPress.
4. Revisar y reparar .htaccess (Servidor Apache)
WordPress usa reglas rewrite en .htaccess en la raíz del sitio. Contenido típico:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Paso a paso:
- Localiza el archivo en la carpeta raíz (public_html, www o similar).
- Renómbralo temporalmente (por ejemplo
.htaccess.bak). - En WP, haz Guardar cambios en Enlaces permanentes: WordPress intentará crear uno nuevo.
- Si WordPress no puede escribir
.htaccess, copia manualmente el bloque anterior en el archivo nuevo y sube con SFTP.
Si usas un proveedor que no permite .htaccess (algunos hostings Windows/IIS), revisa su documentación específica para reglas de rewrite.
5. Configuración típica para Nginx
En Nginx no existe .htaccess. Debes añadir reglas al bloque de servidor (server block):
# ejemplo de location para WordPress (Nginx)
location / {
try_files $uri $uri/ /index.php?$args;
}
Pasos:
- Añade la directiva
try_filesal bloqueserverde tu sitio. - Recarga Nginx:
sudo systemctl reload nginx(u equivalente). - Prueba URLs.
6. Permisos de archivos y propietarios
Permisos comunes:
- Directorios:
755 - Archivos:
644 .htaccessnormalmente 644 (o 664 si el usuario del servidor necesita escribirlo).
Comandos útiles (Linux):
# desde la raíz del sitio
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
# darle propiedad al usuario web (ej: www-data o apache)
sudo chown -R www-data:www-data /ruta/a/tu/sitio
7. Usar WP-CLI para diagnosticar y reparar
Si tienes acceso SSH y WP-CLI instalado:
# comprobar la estructura de permalinks
wp rewrite list
# limpiar y regenerar reglas
wp rewrite flush --hard
# alternativa para solo flush
wp rewrite flush
WP-CLI es muy útil en entornos sin GUI o con permisos de archivo distintos.
8. Problemas con plugins o themes
Pasos para identificar conflictos:
- Desactiva todos los plugins y prueba. Si se arregla, reactiva uno a uno para encontrar el culpable.
- Cambia temporalmente a un theme por defecto (Twenty Twenty-Three, etc.) y prueba.
- Revisa plugins que toquen redirecciones, SEO, caching o seguridad (p. ej. redirection, Yoast, WP Rocket, iThemes).
9. Casos avanzados
Custom Post Types y rewrite rules
Si creas un post type y sus URLs devuelven 404, asegúrate de que al registrar el CPT el parámetro 'rewrite' => true o bien con 'rewrite' => array( 'slug' => 'mi-slug' ). Después de registrar o actualizar un CPT, hay que flush las reglas (guardar permalinks o usar WP-CLI).
// ejemplo básico al registrar un CPT en functions.php
register_post_type('producto', array(
'labels' => array('name' => 'Productos'),
'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'productos')
));
// luego: flush_rewrite_rules() solo en activación de plugin
Uso correcto de flush_rewrite_rules()
No llames a flush_rewrite_rules() en cada carga — solo al activar un plugin o theme (función de activación) para evitar sobrecarga.
10. Checklist final y recomendaciones
- ¿Guardaste los permalinks en WP? → Sí / No
- ¿El archivo
.htaccessestá presente y contiene el bloque de WordPress? - ¿Servidor Nginx configurado con
try_files? - ¿Permisos y propietario correctos?
- ¿Plugins/theme probados (desactivar y cambiar)?
- ¿Caché/CDN purgado?
- ¿WP-CLI usado para regenerar reglas si está disponible?
Soluciones rápidas según síntoma
- 404 en entradas: Guardar permalinks → revisar .htaccess / try_files.
- 500 Internal Server Error al guardar permalinks: Revisa error_log, permisos y módulos (mod_rewrite para Apache).
- WordPress no puede escribir .htaccess: crear manualmente y ajustar permisos/propietario.
Recursos útiles
- WP-CLI (comandos
rewriteyoption get rewrite_rules). - Documentación de tu hosting sobre Apache/Nginx y permisos.
¿Quieres que te entregue este contenido en un archivo HTML descargable o que lo adapte a un PDF/instrucciones para un hosting específico? Dime y lo preparo.
