
🚀 Cómo eliminar index.php e index.html de la URL: redirección 301 a la raíz del sitio
Usted abre Google Search Console y ve la página de inicio indexada dos veces: como site.ru/ y como site.ru/index.php. O site.ru/index.html. Para un motor de búsqueda, estas son dos URL diferentes con contenido idéntico. El resultado: la autoridad de la página se divide a la mitad entre los duplicados, las posiciones caen y el presupuesto de rastreo se desperdicia.
El problema es tan antiguo como la web. La mecánica es simple: por defecto, el servidor devuelve index.html o index.php al solicitar la raíz mediante la directiva DirectoryIndex, pero no bloquea el acceso directo a site.ru/index.php. Desde la perspectiva de Apache, ambas direcciones son legítimas. Pero el motor de búsqueda ve dos páginas diferentes con contenido idéntico y empieza a adivinar cuál posicionar.
A continuación, tres maneras de configurar una redirección 301 desde los archivos de índice hacia la raíz: desde el universal .htaccess hasta Cloudflare y Nginx. Más un método de verificación que toma dos minutos.
💡 Resumen rápido:
- Añada reglas de
mod_rewriteen.htaccesspara interceptar las solicitudes aindex.htmleindex.php - Para WordPress y CMS, use una redirección PHP en el
index.phpde entrada (sobrevive a las actualizaciones de enlaces permanentes) - Verifique el resultado con
curl -Ioredirectchecker.com(la respuesta debe ser301 Moved Permanently) - Revise los enlaces internos del sitio y reemplace
/index.phppor/en menús, logotipos y widgets
Por qué los duplicados de archivos de índice perjudican su sitio
Cuando un visitante escribe site.ru en la barra de direcciones, Apache sustituye silenciosamente index.html o index.php según DirectoryIndex. El navegador muestra la página, la dirección se mantiene limpia y el usuario no nota la sustitución.
Pero si ya existe por ahí un enlace a la ruta completa site.ru/index.php, el rastreador lo sigue, ve el mismo contenido que en site.ru/ y registra un duplicado. ¿De dónde sale ese enlace? Hay muchas opciones: un post antiguo en un sitio de terceros, un socio que incluyó la URL equivocada, un plugin de compartición social que generó un enlace con index.php al final, o incluso el desarrollador que añadió href="/index.html" en la navegación durante la maquetación.
Lo que obtenemos en la práctica:
- Dilución de la autoridad de enlace. Los backlinks se distribuyen entre
/e/index.phpen lugar de acumularse en una única página canónica. - Desperdicio del presupuesto de rastreo. El bot gasta tiempo rastreando duplicados en lugar de secciones útiles del sitio.
- Relevancia diluida. El motor de búsqueda no entiende cuál de las dos páginas mostrar en los resultados y puede alternarlas, las estadísticas de comportamiento del usuario se distorsionan y las posiciones se vuelven inestables.
La situación es totalmente manejable. Se soluciona configurando una redirección 301 permanente desde index.html e index.php hacia la raíz /. Exploremos los métodos disponibles.
Método 1: Redirección vía.htaccess en Apache
El archivo .htaccess se encuentra en la raíz del sitio. Si no existe, cree un archivo de texto con un punto al inicio del nombre; cualquier cliente FTP o gestor de archivos del hosting puede hacerlo.
Abra .htaccess y busque la línea RewriteEngine On. Si no está, añádala como la primera línea después de cualquier comentario. Esta habilita el módulo mod_rewrite responsable de todas las redirecciones.
Debajo de RewriteEngine On, añada las reglas. Aquí tiene un conjunto mínimo funcional:
1 RewriteEngine On 2 3 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ 4 RewriteRule ^index\.php$ https://%{HTTP_HOST}/ [R=301,L] 5 6 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/ 7 RewriteRule ^index\.html$ https://%{HTTP_HOST}/ [R=301,L]
Cómo funciona esto línea por línea:
RewriteCond %{THE_REQUEST}verifica la cadena de solicitud original enviada por el navegador al servidor. Esta contiene explícitamente/index.phpo/index.html, que es justo lo que estamos capturando.RewriteRuleredirige la solicitud a la raíz del dominio con un código301(redirección permanente). La banderaL(last) detiene el procesamiento de reglas adicionales.%{HTTP_HOST}sustituye automáticamente el dominio del sitio; no necesita escribirlo manualmente. El protocolo se especifica explícitamente comohttps://.
Nota crítica: no use la construcción simplificada Redirect 301 /index.php /. La directiva Redirect de mod_alias entra en bucle con los archivos de índice. Tras redirigir a /, Apache vuelve a sustituir index.php mediante DirectoryIndex, la regla se dispara de nuevo y el navegador muestra un error de bucle infinito. La combinación RewriteCond + RewriteRule mediante mod_rewrite analiza específicamente la solicitud original (%{THE_REQUEST}), no la reescrita por reglas internas, por lo que no se produce ningún bucle.
Los cambios en .htaccess surten efecto al instante; Apache relee el archivo con cada solicitud y no se requiere reiniciar el servidor.
Método 2: Redirección PHP para WordPress y CMS
En sitios que funcionan con WordPress, Joomla, Drupal y otros CMS, editar .htaccess es arriesgado: el CMS lo reescribe al actualizar los enlaces permanentes, cambiar la estructura de URL o activar plugins SEO. Sus reglas pueden desaparecer en el siguiente guardado de configuración.
Para WordPress, existe un enfoque más resistente: una redirección directamente en el archivo de entrada index.php. Se encuentra en la raíz de instalación del CMS y se ejecuta con cada solicitud, antes de que cargue el núcleo.
Abra el index.php de WordPress y añada al principio, justo después de la etiqueta de apertura <?php:
1 <?php 2 // 301 redirect from index.php to root 3 if ($_SERVER['REQUEST_URI'] === '/index.php') { 4 header('Location: /', true, 301); 5 exit(); 6 } 7 8 // Standard WordPress code follows 9 define('WP_USE_THEMES', true); 10 // ...
Para sitios en PHP puro sin CMS, la lógica es la misma: coloque el código en el index.php de entrada en la raíz del directorio público. Si su sitio usa ambos archivos de índice (index.php e index.html), añada una comprobación similar para index.html al inicio del mismo script.
Por qué este método es más fiable que editar .htaccess para CMS:
- El código reside dentro de un archivo PHP que el CMS no toca al actualizar la configuración de enlaces permanentes.
- La comprobación de
$_SERVER['REQUEST_URI']captura específicamente la URL solicitada, no la reescrita por las reglas internas de WordPress. exit()garantiza que la ejecución se detiene; no se ejecutará ni una sola línea después.
En proyectos de alto tráfico, la redirección PHP es ligeramente más rápida que la variante de .htaccess: mod_rewrite no se activa para analizar expresiones regulares, ahorrando milisegundos en cada solicitud.
Método 3: Cloudflare, Nginx y otros servidores
Cloudflare. Si su sitio pasa por Cloudflare, puede configurar la redirección a nivel de CDN sin tocar los archivos del servidor. Vaya a Rules → Redirect Rules y cree una regla:
- Campo:
URI Path - Operador:
equals - Valor:
/index.php - URL de redirección:
https://yourdomain.com/ - Código de estado:
301
Añada una regla similar para /index.html. La ventaja: la redirección se ejecuta en los servidores perimetrales de Cloudflare y la solicitud ni siquiera llega a su hosting. La desventaja: el dominio debe estar delegado a los NS de Cloudflare.
Nginx. Los sitios en Nginx no usan .htaccess. Las reglas se añaden al archivo de configuración del servidor, normalmente /etc/nginx/sites-available/yourdomain:
1 location = /index.php { 2 return 301 https://yourdomain.com/; 3 } 4 5 location = /index.html { 6 return 301 https://yourdomain.com/; 7 }
Después de editar, compruebe la sintaxis con nginx -t y aplique los cambios: systemctl reload nginx.
LiteSpeed / OpenLiteSpeed. El servidor soporta .htaccess con las mismas reglas de mod_rewrite que Apache; el método 1 funciona sin cambios. Adicionalmente, puede usar el mecanismo de redirección integrado en el panel WebAdmin de LiteSpeed.
IIS (Windows Server). Para sitios en IIS, la redirección se configura mediante el módulo URL Rewrite en web.config:
1 <rule name="Redirect index.php to root" stopProcessing="true"> 2 <match url="^index\.php$" /> 3 <action type="Redirect" url="/" redirectType="Permanent" /> 4 </rule>
Añada una regla similar para index.html.
Cómo verificar que la redirección funciona
El método más fiable es la línea de comandos. Ejecute:
1 curl -I https://yourdomain.com/index.php
La primera línea de la respuesta debe ser HTTP/1.1 301 Moved Permanently, y la cabecera Location debe mostrar la raíz del sitio. Repita para index.html. La página de inicio en la raíz / debe responder con el código 200.
Herramientas de verificación alternativas:
- Redirect Checker (redirectchecker.com) muestra la cadena completa de redirección con los códigos de respuesta, conveniente para diagnósticos rápidos sin terminal.
- Google Search Console → Inspección de URL (la herramienta de inspección y prueba): muestra cómo ve Googlebot la página tras la redirección y si está disponible para la indexación.
Después de configurar la redirección, es crítico revisar los enlaces internos de su sitio. Asegúrese de que los menús, el logotipo (que normalmente enlaza a la página de inicio), las rutas de navegación y los bloques de posts relacionados apunten a /, no a /index.php. Un solo enlace interno roto puede recrear el duplicado que acaba de eliminar. Haga una búsqueda en el código fuente de todo el sitio: abra cualquier página, pulse Ctrl+U y busque href="/index.php" o href="/index.html". Reemplace cada ocurrencia por href="/".
Vídeo: una breve explicación de las redirecciones 301 de Google
Un vídeo de cuatro minutos de Google Search Central, de visionado obligatorio si configura redirecciones por primera vez. John Mueller explica cómo procesa el motor de búsqueda las redirecciones permanentes y si existe un límite en su número:
⁉️🤔 Preguntas frecuentes
¿Qué pasa si no configuro una redirección desde index.php?
El motor de búsqueda elegirá una versión canónica por su cuenta, pero no necesariamente la que usted necesita. Parte de la autoridad de enlace irá al duplicado y ambas URL pueden alternarse en los resultados de búsqueda. No hay una amenaza directa de penalización, pero las posiciones serán más bajas de lo que podrían ser con una estructura limpia. John Mueller de Google ha enfatizado repetidamente que la canonicalización mediante
rel="canonical"es una sugerencia para el motor de búsqueda, no una directiva. Google puede ignorar la canónica y elegir una página diferente si la considera más relevante. Una redirección 301 es una directiva: garantiza la transferencia de peso y excluye el duplicado del índice.
¿Puedo usar Redirect 301 /index.php / en lugar de mod_rewrite?
Técnicamente sí, pero para los archivos de índice esto es peligroso. Tras redirigir a
/, Apache vuelve a sustituirindex.phpmedianteDirectoryIndex, la reglaRedirectse dispara de nuevo, resultando en un bucle infinito, y el navegador lo corta con un errorERR_TOO_MANY_REDIRECTS.RewriteCondcon la comprobación%{THE_REQUEST}no tiene este problema: analiza la solicitud original del navegador, no la reescrita por las reglas internas del servidor.
¿Necesito configurar una redirección si el sitio solo funciona sobre HTTPS?
Sí. HTTPS y los duplicados de índice son dos problemas independientes. Incluso con una redirección HTTP→HTTPS configurada y un
rel="canonical"correcto, una solicitud directa ahttps://site.ru/index.phpdevolverá un código 200 sin redirección. Las reglas del método 1 cubren ambos protocolos:RewriteRuleespecifica explícitamentehttps://en la URL de destino.
¿Cómo verifico que la redirección no ha roto el sitio?
Tres puntos de control: 1) la página de inicio abre en la raíz
/sin redirecciones (curl -Idebe devolver 200); 2) las URL conindex.phpeindex.htmldevuelven 301 y llevan a/; 3) el administrador de WordPress (/wp-admin/) funciona sin bucles. Este último punto es crítico: una regla mal escrita en.htaccesspuede interceptar solicitudes aindex.phpdentro del administrador y romper el inicio de sesión. La construcción del método 1 es segura: comprueba una coincidencia exacta de URI y no toca/wp-admin/index.php.
¿Qué pasa con otros archivos de índice como index.aspx o index.py?
La mecánica es la misma: copie el bloque
RewriteCond+RewriteRule, reemplace la extensión y añádalo a.htaccess. Para extensiones no estándar, asegúrese de que el archivo existe físicamente en la raíz y está listado enDirectoryIndex; de lo contrario, el servidor no podrá servirlo como archivo de índice de todos modos y no se necesitará ninguna redirección.
Gestión de duplicados de archivos de índice: lista de verificación final
Configurar una redirección 301 desde index.html e index.php a la raíz es una tarea de «cinco minutos de trabajo, años de protección». La regla reside en .htaccess o index.php de forma transparente y no requiere mantenimiento al cambiar de diseño o migrar a un hosting diferente.
Pasos a seguir tras realizar los cambios:
- Verifique la redirección mediante
curl -Ioredirectchecker.com; la respuesta debe ser 301. - Asegúrese de que la página de inicio abre en la raíz con un código 200.
- Busque
href="/index.php"yhref="/index.html"en el código fuente de la página; reemplace cada ocurrencia porhref="/". - En Google Search Console, ejecute una inspección de la página de inicio; el bot debe ver un 200 y la URL canónica sin
/index.php.
Después de esto, los duplicados desaparecerán gradualmente del informe «Cobertura» en Search Console y la autoridad de los backlinks se concentrará en una única página canónica. El resultado no es instantáneo (el motor de búsqueda necesita tiempo para volver a rastrear), pero es inevitable.



