{"id":3745,"date":"2026-08-05T21:43:37","date_gmt":"2026-08-05T19:43:37","guid":{"rendered":"https:\/\/mantenimientoweb.pro\/blog\/como-crear-redirecciones-301-efectivas-mediante-el-archivo-htaccess-en-apache\/"},"modified":"2026-08-05T21:43:39","modified_gmt":"2026-08-05T19:43:39","slug":"como-crear-redirecciones-301-efectivas-mediante-el-archivo-htaccess-en-apache","status":"publish","type":"post","link":"https:\/\/mantenimientoweb.pro\/blog\/como-crear-redirecciones-301-efectivas-mediante-el-archivo-htaccess-en-apache\/","title":{"rendered":"\u00bfC\u00f3mo crear redirecciones 301 efectivas mediante el archivo .htaccess en Apache?"},"content":{"rendered":"<article>\n  \u00bfC\u00f3mo crear redirecciones 301 efectivas mediante el archivo .htaccess en Apache? \ud83e\udded<\/p>\n<p>Una redirecci\u00f3n 301 bien hecha es una mudanza con aviso postal, mapa actualizado y portero informado. Una redirecci\u00f3n mal hecha es dejar la casa vac\u00eda, la puerta abierta y esperar que Google, los usuarios y los enlaces antiguos adivinen d\u00f3nde vive ahora el contenido. Por supuesto, Internet est\u00e1 lleno de optimistas.<\/p>\n<p>El archivo <code>.htaccess<\/code> en Apache tiene una reputaci\u00f3n curiosa: parece peque\u00f1o, casi dom\u00e9stico, como una nota pegada en la nevera del servidor. Pero dentro de esa nota se pueden decidir rutas, jerarqu\u00edas, posicionamiento SEO, autoridad de enlaces, seguridad b\u00e1sica y hasta la paciencia de quien visita el sitio. Una l\u00ednea mal escrita puede convertir una web elegante en un laberinto; una regla precisa, en cambio, gu\u00eda a buscadores y personas como un faro discreto en mitad de una noche t\u00e9cnica.<\/p>\n<p>En esta gu\u00eda encontrar\u00e1s una explicaci\u00f3n pr\u00e1ctica y profunda para crear <strong>redirecciones 301 efectivas mediante .htaccess en Apache<\/strong>: cu\u00e1ndo usarlas, c\u00f3mo escribirlas, qu\u00e9 errores evitar, c\u00f3mo afectan al SEO, c\u00f3mo probarlas y c\u00f3mo convivir con WordPress sin que el archivo parezca una excavaci\u00f3n arqueol\u00f3gica.<\/p>\n<p>    <strong>Contenido principal \ud83d\udccc<\/strong><\/p>\n<ul>\n<li><a href=\"#que-es-301\">Qu\u00e9 es una redirecci\u00f3n 301 y por qu\u00e9 importa<\/a><\/li>\n<li><a href=\"#htaccess-apache\">C\u00f3mo funciona .htaccess en Apache<\/a><\/li>\n<li><a href=\"#redirect-vs-rewrite\">Redirect vs RewriteRule: cu\u00e1ndo usar cada uno<\/a><\/li>\n<li><a href=\"#ejemplos\">Ejemplos profesionales de redirecciones 301<\/a><\/li>\n<li><a href=\"#wordpress\">Redirecciones 301 en WordPress<\/a><\/li>\n<li><a href=\"#seo\">Impacto SEO y buenas pr\u00e1cticas<\/a><\/li>\n<li><a href=\"#errores\">Errores frecuentes y c\u00f3mo evitarlos<\/a><\/li>\n<li><a href=\"#pruebas\">C\u00f3mo probar y auditar tus redirecciones<\/a><\/li>\n<\/ul>\n<h2 id=\"que-es-301\">Qu\u00e9 es una redirecci\u00f3n 301 y por qu\u00e9 importa para SEO \ud83d\udea6<\/h2>\n<p>Una <strong>redirecci\u00f3n 301<\/strong> es una respuesta HTTP que indica que una URL se ha movido de forma permanente a otra ubicaci\u00f3n. El navegador recibe el mensaje, solicita la nueva direcci\u00f3n y, si todo va bien, el usuario ni siquiera nota el peque\u00f1o tr\u00e1mite diplom\u00e1tico que acaba de ocurrir bajo la superficie.<\/p>\n<p>Para los motores de b\u00fasqueda, el c\u00f3digo 301 comunica algo m\u00e1s delicado: \u201cesta p\u00e1gina ya no vive aqu\u00ed; transfiere tus se\u00f1ales, tus enlaces y tu memoria a esta nueva URL\u201d. En t\u00e9rminos de posicionamiento, esto es crucial. Google ha indicado desde hace a\u00f1os que las redirecciones 301, 302 y otros redireccionamientos correctamente implementados pueden transferir se\u00f1ales de ranking, aunque en la pr\u00e1ctica una arquitectura limpia, r\u00e1pida y coherente sigue siendo preferible a una cadena de desv\u00edos digna de carretera comarcal.<\/p>\n<p>La ant\u00edtesis es clara: una URL antigua abandonada es ruido; una URL antigua redirigida es continuidad. Una rompe la historia. La otra la cose.<\/p>\n<table>\n<thead>\n<tr>\n<th>C\u00f3digo<\/th>\n<th>Significado<\/th>\n<th>Uso recomendado<\/th>\n<th>Comentarios SEO<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>301<\/strong><\/td>\n<td>Movido permanentemente<\/td>\n<td>Cambios definitivos de URL, migraciones, HTTPS, dominio nuevo<\/td>\n<td>Es la opci\u00f3n cl\u00e1sica para consolidar se\u00f1ales SEO de forma permanente.<\/td>\n<\/tr>\n<tr>\n<td><strong>302<\/strong><\/td>\n<td>Encontrado \/ redirecci\u00f3n temporal<\/td>\n<td>Campa\u00f1as temporales, pruebas, mantenimiento puntual<\/td>\n<td>No deber\u00eda usarse para cambios permanentes, aunque Google puede interpretarlo con el tiempo.<\/td>\n<\/tr>\n<tr>\n<td><strong>307<\/strong><\/td>\n<td>Redirecci\u00f3n temporal preservando m\u00e9todo HTTP<\/td>\n<td>APIs, formularios, redirecciones temporales estrictas<\/td>\n<td>Menos com\u00fan en SEO tradicional; \u00fatil cuando importa conservar POST\/GET.<\/td>\n<\/tr>\n<tr>\n<td><strong>308<\/strong><\/td>\n<td>Redirecci\u00f3n permanente preservando m\u00e9todo HTTP<\/td>\n<td>APIs modernas y casos donde se requiere permanencia sin cambiar m\u00e9todo<\/td>\n<td>Correcto t\u00e9cnicamente, pero el 301 sigue siendo m\u00e1s habitual en sitios web convencionales.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Conviene recordar algo: una redirecci\u00f3n 301 puede ser cacheada por navegadores, proxies y sistemas intermedios. Es decir, una mala decisi\u00f3n puede quedarse pegada como chicle bajo una mesa. Antes de activar una regla permanente, pru\u00e9bala con cuidado. Lo permanente en servidores, curiosamente, a veces dura lo suficiente como para arruinar una tarde.<\/p>\n<h2 id=\"htaccess-apache\">Qu\u00e9 es el archivo .htaccess y c\u00f3mo lo interpreta Apache \ud83d\udee0\ufe0f<\/h2>\n<p><code>.htaccess<\/code> es un archivo de configuraci\u00f3n distribuida utilizado por Apache HTTP Server. Permite aplicar directivas por directorio sin modificar la configuraci\u00f3n global del servidor, normalmente ubicada en archivos como <code>httpd.conf<\/code>, <code>apache2.conf<\/code> o configuraciones de <code>VirtualHost<\/code>.<\/p>\n<p>Su gran ventaja es tambi\u00e9n su debilidad: es accesible en muchos alojamientos compartidos y permite cambios r\u00e1pidos, pero Apache debe consultarlo durante las peticiones si <code>AllowOverride<\/code> est\u00e1 habilitado. En sitios de alto tr\u00e1fico, muchas reglas en <code>.htaccess<\/code> pueden ser menos eficientes que colocarlas directamente en la configuraci\u00f3n del virtual host. La comodidad y el rendimiento, dos viejos enemigos que se saludan con educaci\u00f3n en cada servidor.<\/p>\n<h3>Requisitos b\u00e1sicos para que funcionen las redirecciones<\/h3>\n<ul>\n<li>El servidor debe ser <strong>Apache<\/strong> o compatible con directivas tipo Apache. En Nginx, LiteSpeed o Caddy la sintaxis puede cambiar.<\/li>\n<li>Debe permitirse el uso de <code>.htaccess<\/code> mediante <code>AllowOverride<\/code>.<\/li>\n<li>Para reglas con <code>RewriteRule<\/code>, debe estar activo el m\u00f3dulo <code>mod_rewrite<\/code>.<\/li>\n<li>Para directivas simples como <code>Redirect 301<\/code>, se utiliza <code>mod_alias<\/code>, normalmente disponible por defecto.<\/li>\n<li>El archivo debe llamarse exactamente <code>.htaccess<\/code>, con punto inicial y sin extensi\u00f3n adicional. No <code>.htaccess.txt<\/code>, esa peque\u00f1a tragedia de escritorio.<\/li>\n<\/ul>\n<p>    <strong>Ubicaci\u00f3n habitual:<\/strong> en la ra\u00edz p\u00fablica del sitio, por ejemplo <code>\/public_html\/.htaccess<\/code>, <code>\/htdocs\/.htaccess<\/code> o el directorio donde vive <code>index.php<\/code> en WordPress.<\/p>\n<h2 id=\"redirect-vs-rewrite\">Redirect 301 vs RewriteRule: dos caminos hacia Roma \ud83c\udfdb\ufe0f<\/h2>\n<p>En Apache puedes crear redirecciones 301 principalmente con dos herramientas: <code>Redirect<\/code> y <code>RewriteRule<\/code>. Ambas sirven, pero no son iguales. Una es un cuchillo de cocina: directa, sencilla, suficiente para cortar pan. La otra es un bistur\u00ed: m\u00e1s compleja, m\u00e1s precisa, y tambi\u00e9n m\u00e1s peligrosa en manos apresuradas.<\/p>\n<h3>Usar Redirect 301 con mod_alias<\/h3>\n<p>La directiva <code>Redirect 301<\/code> es ideal para redirecciones simples de una URL antigua a una nueva.<\/p>\n<pre><code>Redirect 301 \/pagina-antigua\/ https:\/\/www.ejemplo.com\/pagina-nueva\/<\/code><\/pre>\n<p>Ventajas:<\/p>\n<ul>\n<li>Es f\u00e1cil de leer y mantener.<\/li>\n<li>No requiere expresiones regulares complejas.<\/li>\n<li>Funciona bien para redirecciones puntuales.<\/li>\n<\/ul>\n<p>Limitaciones:<\/p>\n<ul>\n<li>No permite condiciones sofisticadas.<\/li>\n<li>Puede ser insuficiente para migraciones grandes o patrones din\u00e1micos.<\/li>\n<li>Si se mezcla sin criterio con <code>RewriteRule<\/code>, el orden de ejecuci\u00f3n puede sorprender. Y no de la forma agradable.<\/li>\n<\/ul>\n<h3>Usar RewriteRule con mod_rewrite<\/h3>\n<p><code>RewriteRule<\/code> permite trabajar con patrones, condiciones, dominios, HTTPS, par\u00e1metros y estructuras complejas.<\/p>\n<pre><code>RewriteEngine On\nRewriteRule ^pagina-antigua\/?$ https:\/\/www.ejemplo.com\/pagina-nueva\/ [R=301,L]<\/code><\/pre>\n<p>En <code>.htaccess<\/code>, el patr\u00f3n de <code>RewriteRule<\/code> no empieza con barra inicial. Es decir, se usa <code>^pagina-antigua\/?$<\/code>, no <code>^\/pagina-antigua\/?$<\/code>. Este detalle min\u00fasculo ha robado m\u00e1s tiempo del que muchos admitir\u00edan en p\u00fablico.<\/p>\n<h3>\u00bfCu\u00e1l deber\u00edas usar?<\/h3>\n<table>\n<thead>\n<tr>\n<th>Situaci\u00f3n<\/th>\n<th>Opci\u00f3n recomendada<\/th>\n<th>Ejemplo de uso<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Redirigir una p\u00e1gina antigua a una nueva<\/td>\n<td><code>Redirect 301<\/code> o <code>RewriteRule<\/code><\/td>\n<td><code>\/servicios-viejos\/<\/code> a <code>\/servicios\/<\/code><\/td>\n<\/tr>\n<tr>\n<td>Migrar muchas URLs con un patr\u00f3n com\u00fan<\/td>\n<td><code>RewriteRule<\/code><\/td>\n<td><code>\/blog\/2020\/articulo<\/code> a <code>\/articulo<\/code><\/td>\n<\/tr>\n<tr>\n<td>Forzar HTTPS<\/td>\n<td><code>RewriteCond<\/code> + <code>RewriteRule<\/code><\/td>\n<td><code>http:\/\/<\/code> a <code>https:\/\/<\/code><\/td>\n<\/tr>\n<tr>\n<td>Canonicalizar www o sin www<\/td>\n<td><code>RewriteCond<\/code> + <code>RewriteRule<\/code><\/td>\n<td><code>www.ejemplo.com<\/code> a <code>ejemplo.com<\/code><\/td>\n<\/tr>\n<tr>\n<td>Eliminar par\u00e1metros concretos<\/td>\n<td><code>RewriteRule<\/code> con <code>QSD<\/code><\/td>\n<td>Quitar query strings obsoletos<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"antes-de-tocar\">Antes de editar .htaccess: prudencia, copia y m\u00e9todo \ud83e\uddef<\/h2>\n<p>Editar <code>.htaccess<\/code> directamente en producci\u00f3n sin copia previa es una de esas costumbres heroicas que explican por qu\u00e9 existen las canas prematuras. Antes de tocarlo, haz esto:<\/p>\n<ol>\n<li><strong>Copia el archivo actual<\/strong> como <code>.htaccess.backup<\/code> o desc\u00e1rgalo por FTP\/SFTP.<\/li>\n<li><strong>Comprueba que puedes revertir el cambio<\/strong> si aparece un error 500.<\/li>\n<li><strong>Edita con un editor de texto plano<\/strong>, no con procesadores que a\u00f1adan formato invisible.<\/li>\n<li><strong>Aplica pocas reglas cada vez<\/strong>. Probar veinte cambios juntos es como buscar una aguja en un granero en llamas.<\/li>\n<li><strong>Documenta cada bloque<\/strong> con comentarios claros usando <code>#<\/code>.<\/li>\n<\/ol>\n<pre><code># Redirecci\u00f3n 301: URL antigua de servicios hacia nueva p\u00e1gina principal\nRedirect 301 \/servicios-antiguos\/ https:\/\/www.ejemplo.com\/servicios\/<\/code><\/pre>\n<p>    <strong>Importante:<\/strong> un error de sintaxis en <code>.htaccess<\/code> puede provocar un <strong>Error 500 Internal Server Error<\/strong>. Si ocurre, restaura la copia anterior y revisa los logs de Apache.<\/p>\n<h2 id=\"ejemplos\">Ejemplos profesionales de redirecciones 301 en .htaccess \u2699\ufe0f<\/h2>\n<p>Vamos a lo que suele salvar proyectos reales: ejemplos concretos, explicados y listos para adaptar. Cambia <code>ejemplo.com<\/code> por tu dominio y revisa cada patr\u00f3n antes de publicarlo.<\/p>\n<h3>1. Redirigir una URL antigua a una nueva<\/h3>\n<p>Con <code>Redirect 301<\/code>:<\/p>\n<pre><code>Redirect 301 \/pagina-antigua\/ https:\/\/www.ejemplo.com\/pagina-nueva\/<\/code><\/pre>\n<p>Con <code>RewriteRule<\/code>:<\/p>\n<pre><code>RewriteEngine On\nRewriteRule ^pagina-antigua\/?$ https:\/\/www.ejemplo.com\/pagina-nueva\/ [R=301,L]<\/code><\/pre>\n<p>La versi\u00f3n con <code>RewriteRule<\/code> permite tolerar la ausencia o presencia de barra final gracias a <code>\/?<\/code>.<\/p>\n<h3>2. Redirigir varias p\u00e1ginas antiguas a sus equivalentes nuevas<\/h3>\n<pre><code>Redirect 301 \/empresa\/ https:\/\/www.ejemplo.com\/sobre-nosotros\/\nRedirect 301 \/contactenos\/ https:\/\/www.ejemplo.com\/contacto\/\nRedirect 301 \/productos-viejos\/ https:\/\/www.ejemplo.com\/catalogo\/<\/code><\/pre>\n<p>Esta t\u00e9cnica es limpia para listas peque\u00f1as. Para cientos o miles de URLs, conviene evaluar alternativas: reglas por patr\u00f3n, configuraci\u00f3n del virtual host, mapas de reescritura con <code>RewriteMap<\/code> \u2014no disponible en <code>.htaccess<\/code>\u2014 o herramientas especializadas durante migraciones grandes.<\/p>\n<h3>3. Redirigir de HTTP a HTTPS<\/h3>\n<p>Forzar HTTPS es casi obligatorio en sitios modernos. No por moda: por seguridad, confianza, compatibilidad con navegadores y se\u00f1ales de calidad. Un sitio sin HTTPS hoy se parece a una tienda con caja registradora abierta y un cartel que dice \u201cprobablemente no pase nada\u201d.<\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTPS} !=on\nRewriteRule ^ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [R=301,L]<\/code><\/pre>\n<p>Esta regla conserva el host y la ruta solicitada. Si quieres combinar HTTPS con dominio can\u00f3nico, es mejor hacerlo en una \u00fanica redirecci\u00f3n para evitar cadenas innecesarias.<\/p>\n<h3>4. Redirigir de www a sin www<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTP_HOST} ^www\\.ejemplo\\.com$ [NC]\nRewriteRule ^ https:\/\/ejemplo.com%{REQUEST_URI} [R=301,L]<\/code><\/pre>\n<h3>5. Redirigir de sin www a www<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTP_HOST} ^ejemplo\\.com$ [NC]\nRewriteRule ^ https:\/\/www.ejemplo.com%{REQUEST_URI} [R=301,L]<\/code><\/pre>\n<p>No hay una opci\u00f3n universalmente superior entre <strong>www<\/strong> y <strong>sin www<\/strong>. Lo importante es elegir una versi\u00f3n can\u00f3nica y ser coherente: enlaces internos, sitemap XML, etiqueta canonical, configuraci\u00f3n de Search Console y redirecciones deben contar la misma historia.<\/p>\n<h3>6. Forzar HTTPS y dominio sin www en una sola redirecci\u00f3n<\/h3>\n<p>Evitar cadenas de redirecci\u00f3n mejora la velocidad, reduce ambig\u00fcedades y facilita el rastreo. En vez de pasar de <code>http:\/\/www<\/code> a <code>https:\/\/www<\/code> y luego a <code>https:\/\/<\/code> sin www, conviene saltar directamente al destino final.<\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTPS} !=on [OR]\nRewriteCond %{HTTP_HOST} ^www\\.ejemplo\\.com$ [NC]\nRewriteRule ^ https:\/\/ejemplo.com%{REQUEST_URI} [R=301,L]<\/code><\/pre>\n<h3>7. Redirigir un dominio antiguo a uno nuevo conservando rutas<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTP_HOST} ^(www\\.)?dominio-antiguo\\.com$ [NC]\nRewriteRule ^(.*)$ https:\/\/www.dominio-nuevo.com\/$1 [R=301,L]<\/code><\/pre>\n<p>As\u00ed, <code>https:\/\/dominio-antiguo.com\/blog\/articulo\/<\/code> ir\u00e1 a <code>https:\/\/www.dominio-nuevo.com\/blog\/articulo\/<\/code>. Es una mudanza ordenada: las cajas llegan a la habitaci\u00f3n correcta, no todas al garaje.<\/p>\n<h3>8. Redirigir todo un directorio a otro<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteRule ^blog-antiguo\/(.*)$ https:\/\/www.ejemplo.com\/blog\/$1 [R=301,L]<\/code><\/pre>\n<p>\u00datil cuando cambia una estructura completa, por ejemplo de <code>\/blog-antiguo\/<\/code> a <code>\/blog\/<\/code>. El grupo <code>(.*)<\/code> captura el resto de la URL y <code>$1<\/code> lo reutiliza en el destino.<\/p>\n<h3>9. Redirigir URLs con extensi\u00f3n .html a URLs limpias<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteRule ^(.+)\\.html$ https:\/\/www.ejemplo.com\/$1\/ [R=301,L]<\/code><\/pre>\n<p>Ejemplo: <code>\/servicios.html<\/code> pasa a <code>\/servicios\/<\/code>. Antes de aplicar una regla global as\u00ed, comprueba que todas las nuevas URLs existen. Una redirecci\u00f3n hacia una p\u00e1gina 404 es una promesa rota con sombrero t\u00e9cnico.<\/p>\n<h3>10. Eliminar index.php o index.html de la URL<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteCond %{THE_REQUEST} \\s\/+(.*\/)?index\\.(php|html?)\\s [NC]\nRewriteRule ^(.*\/)?index\\.(php|html?)$ https:\/\/www.ejemplo.com\/$1 [R=301,L]<\/code><\/pre>\n<p>La condici\u00f3n con <code>THE_REQUEST<\/code> ayuda a redirigir solo cuando el usuario o bot solicit\u00f3 expl\u00edcitamente <code>index.php<\/code> o <code>index.html<\/code>, evitando ciertos bucles internos.<\/p>\n<h3>11. A\u00f1adir barra final a URLs sin extensi\u00f3n<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_URI} !(.*)\/$\nRewriteRule ^(.+)$ https:\/\/www.ejemplo.com\/$1\/ [R=301,L]<\/code><\/pre>\n<p>Esta regla no se aplica a archivos reales gracias a <code>%{REQUEST_FILENAME} !-f<\/code>. As\u00ed evitamos convertir <code>\/imagen.jpg<\/code> en <code>\/imagen.jpg\/<\/code>, que ser\u00eda t\u00e9cnicamente absurdo, aunque Internet ha visto cosas peores.<\/p>\n<h3>12. Quitar barra final de URLs<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteCond %{REQUEST_URI} .+\/$\nRewriteRule ^(.+)\/$ https:\/\/www.ejemplo.com\/$1 [R=301,L]<\/code><\/pre>\n<p>Elige una estrategia: con barra o sin barra. Las dos pueden funcionar. Lo que no funciona es alternar como veleta nerviosa. La consistencia reduce duplicados y mejora la comprensi\u00f3n de la estructura del sitio.<\/p>\n<h3>13. Redirigir una categor\u00eda antigua a una nueva<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteRule ^categoria\/noticias-antiguas\/(.*)$ https:\/\/www.ejemplo.com\/categoria\/actualidad\/$1 [R=301,L]<\/code><\/pre>\n<p>Especialmente \u00fatil en blogs, revistas digitales y sitios WordPress que reorganizan taxonom\u00edas.<\/p>\n<h3>14. Redirigir preservando par\u00e1metros de consulta<\/h3>\n<p>Por defecto, <code>mod_rewrite<\/code> suele conservar la query string original si el destino no especifica una nueva. Por ejemplo:<\/p>\n<pre><code>RewriteEngine On\n\nRewriteRule ^producto-antiguo\/$ https:\/\/www.ejemplo.com\/producto-nuevo\/ [R=301,L]<\/code><\/pre>\n<p>Una solicitud a <code>\/producto-antiguo\/?color=azul<\/code> puede terminar en <code>\/producto-nuevo\/?color=azul<\/code>.<\/p>\n<h3>15. Eliminar par\u00e1metros de consulta con QSD<\/h3>\n<p>Si quieres descartar los par\u00e1metros, usa <code>QSD<\/code> en Apache 2.4 o superior.<\/p>\n<pre><code>RewriteEngine On\n\nRewriteRule ^landing-antigua\/$ https:\/\/www.ejemplo.com\/landing-nueva\/ [R=301,L,QSD]<\/code><\/pre>\n<p><code>QSD<\/code> significa <em>Query String Discard<\/em>. Es \u00fatil para limpiar URLs con par\u00e1metros obsoletos, campa\u00f1as caducadas o filtros que no deben indexarse.<\/p>\n<h3>16. A\u00f1adir o conservar una query string con QSA<\/h3>\n<pre><code>RewriteEngine On\n\nRewriteRule ^descarga\/$ https:\/\/www.ejemplo.com\/recurso\/?origen=redireccion [R=301,L,QSA]<\/code><\/pre>\n<p><code>QSA<\/code> a\u00f1ade la query string original a la nueva, en lugar de reemplazarla por completo.<\/p>\n<h3>17. Redirigir URLs con caracteres especiales<\/h3>\n<p>Cuando hay acentos, espacios codificados o caracteres no ASCII, conviene probar cuidadosamente. Las URLs reales suelen llegar codificadas, por ejemplo <code>p%C3%A1gina<\/code> en lugar de <code>p\u00e1gina<\/code>. En muchos casos es preferible redirigir desde la versi\u00f3n codificada observada en logs.<\/p>\n<pre><code>Redirect 301 \/p%C3%A1gina-antigua\/ https:\/\/www.ejemplo.com\/pagina-nueva\/<\/code><\/pre>\n<p>Si la redirecci\u00f3n genera caracteres escapados de forma no deseada, la bandera <code>NE<\/code> puede ayudar en ciertos escenarios con <code>RewriteRule<\/code>, aunque debe usarse con criterio.<\/p>\n<pre><code>RewriteEngine On\n\nRewriteRule ^oferta-especial\/$ https:\/\/www.ejemplo.com\/promocion\/#detalles [R=301,L,NE]<\/code><\/pre>\n<p>Sin <code>NE<\/code>, Apache puede escapar el s\u00edmbolo <code>#<\/code> como parte de la URL. Con <code>NE<\/code>, se evita ese escape en el destino.<\/p>\n<h2 id=\"wordpress\">Redirecciones 301 en WordPress mediante .htaccess \ud83e\udde9<\/h2>\n<p>WordPress y <code>.htaccess<\/code> conviven como vecinos que comparten pared: casi siempre en paz, hasta que alguien toca el taladro. WordPress usa reglas de reescritura para sus enlaces permanentes, y esas reglas suelen aparecer entre estos marcadores:<\/p>\n<pre><code># BEGIN WordPress\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\nRewriteBase \/\nRewriteRule ^index\\.php$ - [L]\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule . \/index.php [L]\n&lt;\/IfModule&gt;\n# END WordPress<\/code><\/pre>\n<p>La recomendaci\u00f3n habitual es colocar tus redirecciones personalizadas <strong>antes del bloque de WordPress<\/strong>. Si las colocas despu\u00e9s, WordPress podr\u00eda procesar primero la solicitud y la redirecci\u00f3n no ejecutarse como esperas.<\/p>\n<pre><code># Redirecciones personalizadas\nRewriteEngine On\nRewriteRule ^pagina-vieja\/?$ https:\/\/www.ejemplo.com\/pagina-nueva\/ [R=301,L]\n\n# BEGIN WordPress\n&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\nRewriteBase \/\nRewriteRule ^index\\.php$ - [L]\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule . \/index.php [L]\n&lt;\/IfModule&gt;\n# END WordPress<\/code><\/pre>\n<h3>\u00bfPlugin de redirecciones o .htaccess?<\/h3>\n<p>Depende. Un plugin como Redirection, Rank Math, Yoast SEO Premium o herramientas similares puede ser c\u00f3modo para equipos editoriales, especialmente cuando las redirecciones cambian a menudo. Pero para reglas estructurales \u2014HTTPS, www, dominio can\u00f3nico, migraciones por patr\u00f3n\u2014 <code>.htaccess<\/code> suele ser m\u00e1s directo y r\u00e1pido.<\/p>\n<table>\n<thead>\n<tr>\n<th>Opci\u00f3n<\/th>\n<th>Ventajas<\/th>\n<th>Riesgos o l\u00edmites<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>.htaccess<\/strong><\/td>\n<td>R\u00e1pido, bajo nivel, no depende de WordPress, ideal para patrones<\/td>\n<td>Un error puede romper el sitio; menos amigable para usuarios no t\u00e9cnicos<\/td>\n<\/tr>\n<tr>\n<td><strong>Plugin<\/strong><\/td>\n<td>Interfaz visual, logs, gesti\u00f3n editorial, importaciones CSV<\/td>\n<td>Depende de WordPress y puede a\u00f1adir carga si se usa sin control<\/td>\n<\/tr>\n<tr>\n<td><strong>Servidor \/ VirtualHost<\/strong><\/td>\n<td>M\u00e1s eficiente para alto tr\u00e1fico, configuraci\u00f3n centralizada<\/td>\n<td>Requiere acceso de administrador al servidor<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Una an\u00e9cdota breve: una vez vi una migraci\u00f3n de WordPress con m\u00e1s de 1.800 redirecciones metidas a mano en <code>.htaccess<\/code>. Funcionaba. Tambi\u00e9n funciona cruzar una ciudad empujando un piano, pero quiz\u00e1 convenga llamar a una empresa de mudanzas. Para vol\u00famenes grandes, usa importaciones, reglas por patr\u00f3n o soluciones a nivel de servidor.<\/p>\n<h2 id=\"seo\">Buenas pr\u00e1cticas SEO para redirecciones 301 \ud83c\udf31<\/h2>\n<p>Las redirecciones 301 no son solo una soluci\u00f3n t\u00e9cnica. Son una forma de preservar memoria. Cada enlace externo, cada marcador guardado, cada resultado de b\u00fasqueda antiguo es una hebra; la redirecci\u00f3n las recoge para que no queden flotando como telara\u00f1as rotas.<\/p>\n<h3>1. Redirige hacia la p\u00e1gina m\u00e1s equivalente posible<\/h3>\n<p>Si eliminas una p\u00e1gina sobre \u201cmantenimiento WordPress\u201d, no la redirijas sin m\u00e1s a la home. Redir\u00edgela a otra p\u00e1gina sobre mantenimiento WordPress, servicios relacionados o una gu\u00eda actualizada. Redirigir todo a la p\u00e1gina principal es c\u00f3modo, s\u00ed; tambi\u00e9n es la forma elegante de decirle al usuario: \u201carr\u00e9glate\u201d.<\/p>\n<h3>2. Evita cadenas de redirecci\u00f3n<\/h3>\n<p>Una cadena ocurre cuando una URL redirige a otra, que redirige a otra, que redirige a otra. Por ejemplo:<\/p>\n<pre><code>http:\/\/ejemplo.com\/pagina\n\u2192 https:\/\/ejemplo.com\/pagina\n\u2192 https:\/\/www.ejemplo.com\/pagina\n\u2192 https:\/\/www.ejemplo.com\/pagina\/<\/code><\/pre>\n<p>Mejor:<\/p>\n<pre><code>http:\/\/ejemplo.com\/pagina\n\u2192 https:\/\/www.ejemplo.com\/pagina\/<\/code><\/pre>\n<p>Cada salto consume tiempo, presupuesto de rastreo y paciencia. La web r\u00e1pida es un r\u00edo claro; la web llena de redirecciones encadenadas es un pantano con se\u00f1alizaci\u00f3n optimista.<\/p>\n<h3>3. No redirijas a p\u00e1ginas 404, 410 o irrelevantes<\/h3>\n<p>Una redirecci\u00f3n 301 hacia una p\u00e1gina inexistente no resuelve un problema: lo embellece con una alfombra. Antes de publicar, comprueba que el destino responde con <code>200 OK<\/code> y tiene contenido \u00fatil.<\/p>\n<h3>4. Actualiza enlaces internos<\/h3>\n<p>La redirecci\u00f3n ayuda, pero no debe sustituir una buena arquitectura interna. Si tus men\u00fas, posts y botones siguen enlazando a URLs antiguas, el servidor trabajar\u00e1 de m\u00e1s. Actualiza enlaces internos, sitemap XML, datos estructurados, hreflang y etiquetas canonical.<\/p>\n<h3>5. Mant\u00e9n un mapa de redirecciones<\/h3>\n<p>En migraciones SEO serias, crea una hoja de c\u00e1lculo con:<\/p>\n<ul>\n<li>URL antigua<\/li>\n<li>URL nueva<\/li>\n<li>Tipo de redirecci\u00f3n<\/li>\n<li>Estado HTTP del destino<\/li>\n<li>Tr\u00e1fico org\u00e1nico previo<\/li>\n<li>Backlinks importantes<\/li>\n<li>Responsable de validaci\u00f3n<\/li>\n<\/ul>\n<p>Puede parecer burocr\u00e1tico. Luego llega el d\u00eda del lanzamiento, algo falla, y esa hoja se convierte en un chaleco salvavidas.<\/p>\n<h3>6. Conserva las redirecciones el tiempo suficiente<\/h3>\n<p>No hay una duraci\u00f3n \u00fanica para mantener una 301. En migraciones importantes, suele recomendarse conservarlas durante a\u00f1os, especialmente si existen enlaces externos relevantes. Mientras haya usuarios, bots o referencias solicitando la URL antigua, la redirecci\u00f3n sigue cumpliendo una funci\u00f3n.<\/p>\n<h3>7. Usa 410 cuando el contenido desapareci\u00f3 para siempre<\/h3>\n<p>No todo merece una redirecci\u00f3n. Si una p\u00e1gina ya no existe, no tiene equivalente y no aporta valor, un c\u00f3digo <code>410 Gone<\/code> puede ser m\u00e1s honesto que enviarla a cualquier parte. Hay una belleza rara en admitir que algo termin\u00f3.<\/p>\n<pre><code>Redirect gone \/promocion-caducada\/<\/code><\/pre>\n<h2 id=\"orden\">El orden de las reglas importa m\u00e1s de lo que parece \ud83e\udde0<\/h2>\n<p>Apache procesa reglas seg\u00fan el contexto y el orden. En <code>.htaccess<\/code>, una regla general colocada antes de una espec\u00edfica puede capturar solicitudes que pretend\u00edas tratar de otra manera.<\/p>\n<p>Ejemplo problem\u00e1tico:<\/p>\n<pre><code>RewriteEngine On\n\nRewriteRule ^blog\/(.*)$ https:\/\/www.ejemplo.com\/articulos\/$1 [R=301,L]\nRewriteRule ^blog\/contacto\/?$ https:\/\/www.ejemplo.com\/contacto\/ [R=301,L]<\/code><\/pre>\n<p>La segunda regla quiz\u00e1 nunca se comporte como esperas porque la primera ya intercept\u00f3 <code>\/blog\/contacto\/<\/code>. Mejor colocar primero lo espec\u00edfico:<\/p>\n<pre><code>RewriteEngine On\n\nRewriteRule ^blog\/contacto\/?$ https:\/\/www.ejemplo.com\/contacto\/ [R=301,L]\nRewriteRule ^blog\/(.*)$ https:\/\/www.ejemplo.com\/articulos\/$1 [R=301,L]<\/code><\/pre>\n<p>Regla pr\u00e1ctica: <strong>de lo particular a lo general<\/strong>. Primero la aguja, luego el pajar.<\/p>\n<h2 id=\"flags\">Banderas \u00fatiles de RewriteRule: R, L, END, NC, NE, QSA, QSD \ud83e\uddea<\/h2>\n<p>Las banderas de <code>RewriteRule<\/code> modifican el comportamiento de la regla. Algunas son esenciales para redirecciones 301 profesionales.<\/p>\n<table>\n<thead>\n<tr>\n<th>Bandera<\/th>\n<th>Significado<\/th>\n<th>Uso com\u00fan<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>R=301<\/code><\/td>\n<td>Devuelve redirecci\u00f3n permanente<\/td>\n<td>Imprescindible para redirecciones 301<\/td>\n<\/tr>\n<tr>\n<td><code>L<\/code><\/td>\n<td>Last: detiene el procesamiento del conjunto actual de reglas<\/td>\n<td>Muy habitual en <code>.htaccess<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>END<\/code><\/td>\n<td>Finaliza reescrituras en Apache 2.4+<\/td>\n<td>\u00datil para evitar reprocesamiento en contextos complejos<\/td>\n<\/tr>\n<tr>\n<td><code>NC<\/code><\/td>\n<td>No case: ignora may\u00fasculas\/min\u00fasculas<\/td>\n<td>Dominios o rutas con variaciones<\/td>\n<\/tr>\n<tr>\n<td><code>NE<\/code><\/td>\n<td>No escape<\/td>\n<td>Evita escape autom\u00e1tico en destinos con fragmentos o caracteres especiales<\/td>\n<\/tr>\n<tr>\n<td><code>QSA<\/code><\/td>\n<td>Query String Append<\/td>\n<td>A\u00f1ade par\u00e1metros existentes al destino<\/td>\n<\/tr>\n<tr>\n<td><code>QSD<\/code><\/td>\n<td>Query String Discard<\/td>\n<td>Descarta par\u00e1metros existentes en Apache 2.4+<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>    <strong>Consejo t\u00e9cnico:<\/strong> en Apache 2.4, <code>[END]<\/code> puede ser m\u00e1s definitivo que <code>[L]<\/code> en determinados escenarios con reescrituras internas. Aun as\u00ed, <code>[R=301,L]<\/code> sigue siendo la combinaci\u00f3n m\u00e1s com\u00fan y compatible para redirecciones sencillas.<\/p>\n<h2 id=\"errores\">Errores frecuentes al crear redirecciones 301 en .htaccess \ud83d\udd73\ufe0f<\/h2>\n<h3>1. Crear bucles de redirecci\u00f3n<\/h3>\n<p>Un bucle ocurre cuando una regla redirige a una URL que vuelve a activar la misma regla. El navegador responde con mensajes como \u201ctoo many redirects\u201d. Es el equivalente digital de entrar por una puerta giratoria que nunca se detiene.<\/p>\n<p>Ejemplo peligroso:<\/p>\n<pre><code>RewriteEngine On\nRewriteRule ^(.*)$ https:\/\/www.ejemplo.com\/$1 [R=301,L]<\/code><\/pre>\n<p>Si ya est\u00e1s en <code>https:\/\/www.ejemplo.com\/<\/code>, esta regla puede seguir coincidiendo. A\u00f1ade condiciones:<\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTPS} !=on [OR]\nRewriteCond %{HTTP_HOST} !^www\\.ejemplo\\.com$ [NC]\nRewriteRule ^ https:\/\/www.ejemplo.com%{REQUEST_URI} [R=301,L]<\/code><\/pre>\n<h3>2. Usar 302 por costumbre cuando necesitas 301<\/h3>\n<p>Muchos paneles de hosting crean redirecciones temporales por defecto. Si el cambio es permanente, revisa que sea <code>301<\/code>. La temporalidad eterna es una contradicci\u00f3n encantadora, pero mala para SEO.<\/p>\n<h3>3. Redirigir masivamente a la home<\/h3>\n<p>Esta pr\u00e1ctica puede interpretarse como un soft 404 si el contenido no es equivalente. Adem\u00e1s, frustra al usuario. Si alguien busca una ficha t\u00e9cnica y aterriza en la portada gen\u00e9rica, no siente gratitud; siente que le han cambiado el mapa por un p\u00f3ster.<\/p>\n<h3>4. No tener en cuenta may\u00fasculas y min\u00fasculas<\/h3>\n<p>En rutas, <code>\/Producto\/<\/code> y <code>\/producto\/<\/code> pueden tratarse como URLs diferentes. Si tu sitio ha acumulado variaciones, puedes usar <code>[NC]<\/code> en reglas concretas, aunque conviene normalizar enlaces internos.<\/p>\n<h3>5. Mezclar Redirect y RewriteRule sin comprender el orden<\/h3>\n<p><code>Redirect<\/code> pertenece a <code>mod_alias<\/code> y <code>RewriteRule<\/code> a <code>mod_rewrite<\/code>. En algunos contextos, las directivas de m\u00f3dulos distintos no se ejecutan exactamente como imaginas si las mezclas en bloques grandes. Para configuraciones complejas, usa preferiblemente <code>mod_rewrite<\/code> de forma consistente.<\/p>\n<h3>6. Olvidar el cach\u00e9<\/h3>\n<p>Las redirecciones 301 pueden quedar cacheadas por el navegador. Si est\u00e1s probando, usa modo inc\u00f3gnito, limpia cach\u00e9, prueba con <code>curl<\/code> o comienza temporalmente con <code>R=302<\/code> hasta confirmar la l\u00f3gica. Luego cambia a <code>301<\/code>.<\/p>\n<h3>7. No revisar logs<\/h3>\n<p>Los logs del servidor son una cr\u00f3nica honesta. No adornan, no opinan, no perdonan. Revisar <code>access.log<\/code> y <code>error.log<\/code> ayuda a detectar URLs antiguas solicitadas, errores 404, bucles y patrones que merecen reglas espec\u00edficas.<\/p>\n<h2 id=\"pruebas\">C\u00f3mo probar una redirecci\u00f3n 301 correctamente \ud83d\udd0d<\/h2>\n<p>No basta con abrir la URL en el navegador y decir \u201cparece que va\u201d. El navegador puede ocultar pasos, cachear respuestas o mostrarte una versi\u00f3n ya resuelta. Para validar redirecciones 301 como corresponde, usa herramientas objetivas.<\/p>\n<h3>Prueba con curl<\/h3>\n<pre><code>curl -I http:\/\/www.ejemplo.com\/pagina-antigua\/<\/code><\/pre>\n<p>Respuesta esperada:<\/p>\n<pre><code>HTTP\/1.1 301 Moved Permanently\nLocation: https:\/\/www.ejemplo.com\/pagina-nueva\/<\/code><\/pre>\n<p>Para seguir toda la cadena:<\/p>\n<pre><code>curl -IL http:\/\/www.ejemplo.com\/pagina-antigua\/<\/code><\/pre>\n<h3>Herramientas \u00fatiles<\/h3>\n<ul>\n<li><strong>Google Search Console:<\/strong> inspecci\u00f3n de URLs, cobertura, rastreo e indexaci\u00f3n.<\/li>\n<li><strong>Screaming Frog SEO Spider:<\/strong> auditor\u00eda masiva de c\u00f3digos HTTP, cadenas y bucles.<\/li>\n<li><strong>Sitebulb:<\/strong> an\u00e1lisis visual y t\u00e9cnico de arquitectura.<\/li>\n<li><strong>Ahrefs, Semrush o Sistrix:<\/strong> detecci\u00f3n de backlinks apuntando a URLs antiguas.<\/li>\n<li><strong>DevTools del navegador:<\/strong> pesta\u00f1a Network, desactivando cach\u00e9 durante la prueba.<\/li>\n<li><strong>Logs de Apache:<\/strong> la fuente primaria, menos bonita pero m\u00e1s sincera.<\/li>\n<\/ul>\n<h3>Checklist de validaci\u00f3n<\/h3>\n<ul>\n<li>\u2705 La URL antigua devuelve <code>301<\/code>.<\/li>\n<li>\u2705 La cabecera <code>Location<\/code> apunta a la URL final correcta.<\/li>\n<li>\u2705 La URL final devuelve <code>200 OK<\/code>.<\/li>\n<li>\u2705 No hay cadenas innecesarias.<\/li>\n<li>\u2705 No hay bucles.<\/li>\n<li>\u2705 La redirecci\u00f3n funciona con HTTP, HTTPS, www y sin www seg\u00fan corresponda.<\/li>\n<li>\u2705 Los enlaces internos apuntan directamente a la URL nueva.<\/li>\n<li>\u2705 El sitemap XML contiene solo URLs can\u00f3nicas finales.<\/li>\n<li>\u2705 Las etiquetas canonical coinciden con el destino final.<\/li>\n<\/ul>\n<h2 id=\"migraciones\">Redirecciones 301 en migraciones web: estrategia antes que sintaxis \ud83d\ude80<\/h2>\n<p>En una migraci\u00f3n de sitio, las redirecciones 301 son una pieza, no el proyecto entero. Cambiar dominio, CMS, arquitectura o protocolo sin plan de redirecci\u00f3n es como trasladar una biblioteca mezclando los libros por color de portada. Queda vistoso durante cinco minutos. Luego nadie encuentra nada.<\/p>\n<h3>Fases recomendadas<\/h3>\n<ol>\n<li><strong>Inventario de URLs actuales:<\/strong> extrae URLs desde sitemap, CMS, Analytics, Search Console, logs y herramientas SEO.<\/li>\n<li><strong>Clasificaci\u00f3n por valor:<\/strong> identifica p\u00e1ginas con tr\u00e1fico, conversiones, backlinks y posicionamiento.<\/li>\n<li><strong>Mapeo uno a uno:<\/strong> asigna cada URL antigua a su equivalente nuevo.<\/li>\n<li><strong>Reglas por patr\u00f3n:<\/strong> cuando sea posible, reduce listas enormes con expresiones controladas.<\/li>\n<li><strong>Pruebas en staging:<\/strong> valida antes de exponer al p\u00fablico.<\/li>\n<li><strong>Lanzamiento vigilado:<\/strong> monitoriza errores 404, logs y cobertura en Search Console.<\/li>\n<li><strong>Ajustes posteriores:<\/strong> ninguna migraci\u00f3n real sale perfecta al primer minuto. La perfecci\u00f3n absoluta es una mascota que todos dicen tener y nadie ha visto.<\/li>\n<\/ol>\n<h3>Ejemplo de migraci\u00f3n de estructura<\/h3>\n<p>Supongamos que antes ten\u00edas:<\/p>\n<pre><code>\/blog\/2023\/05\/nombre-del-articulo\/<\/code><\/pre>\n<p>Y ahora quieres:<\/p>\n<pre><code>\/nombre-del-articulo\/<\/code><\/pre>\n<p>Podr\u00edas usar:<\/p>\n<pre><code>RewriteEngine On\n\nRewriteRule ^blog\/[0-9]{4}\/[0-9]{2}\/([^\/]+)\/?$ https:\/\/www.ejemplo.com\/$1\/ [R=301,L]<\/code><\/pre>\n<p>Esta regla captura el slug final con <code>([^\/]+)<\/code> y lo reutiliza como destino. Antes de aplicarla, confirma que no existen colisiones: dos art\u00edculos con el mismo slug en a\u00f1os distintos podr\u00edan terminar peleando por una misma URL.<\/p>\n<h2 id=\"rendimiento\">Rendimiento: cuando .htaccess deja de ser c\u00f3modo y empieza a pesar \ud83d\udc22<\/h2>\n<p>En sitios peque\u00f1os y medianos, unas cuantas reglas en <code>.htaccess<\/code> no suelen representar un problema serio. Pero en proyectos grandes, con miles de redirecciones y mucho tr\u00e1fico, conviene pensar en rendimiento.<\/p>\n<p>Apache eval\u00faa <code>.htaccess<\/code> en el contexto de las solicitudes cuando est\u00e1 permitido por configuraci\u00f3n. Adem\u00e1s, expresiones regulares complejas, listas extensas y reglas mal ordenadas pueden a\u00f1adir latencia. No siempre ser\u00e1 dram\u00e1tico. Pero la suma de peque\u00f1as demoras es como polvo sobre un cristal: al principio no se nota, hasta que un d\u00eda la luz ya no entra igual.<\/p>\n<h3>Recomendaciones de rendimiento<\/h3>\n<ul>\n<li>Coloca reglas muy frecuentes al principio.<\/li>\n<li>Evita expresiones regulares innecesariamente amplias.<\/li>\n<li>No dupliques reglas para casos que pueden resolverse con un patr\u00f3n seguro.<\/li>\n<li>Para miles de redirecciones, considera reglas a nivel de <code>VirtualHost<\/code>, CDN, proxy inverso o soluciones espec\u00edficas.<\/li>\n<li>Evita cadenas: una sola redirecci\u00f3n al destino final.<\/li>\n<li>Audita peri\u00f3dicamente reglas obsoletas.<\/li>\n<\/ul>\n<h2 id=\"seguridad\">Seguridad y redirecciones: cuidado con los destinos abiertos \ud83d\udd10<\/h2>\n<p>Una redirecci\u00f3n mal dise\u00f1ada puede convertirse en un <strong>open redirect<\/strong>, es decir, una URL de tu dominio que permite enviar usuarios a destinos externos manipulados. Esto se usa en phishing porque el enlace parece leg\u00edtimo al principio. El veneno, como en ciertos cuentos antiguos, viene servido en copa conocida.<\/p>\n<p>Evita construir destinos directamente desde par\u00e1metros proporcionados por el usuario sin validaci\u00f3n. Por ejemplo, cuidado con patrones que permitan algo como:<\/p>\n<pre><code>https:\/\/www.ejemplo.com\/salir?url=https:\/\/sitio-malicioso.com<\/code><\/pre>\n<p>Desde <code>.htaccess<\/code>, mant\u00e9n destinos expl\u00edcitos y controlados. Si necesitas l\u00f3gica compleja, val\u00eddala en la aplicaci\u00f3n con una lista blanca de dominios permitidos.<\/p>\n<h2 id=\"hsts\">HTTPS, HSTS y redirecciones 301: poder con cautela \u26a1<\/h2>\n<p>Cuando todo tu sitio funciona correctamente bajo HTTPS, puedes considerar HSTS mediante la cabecera <code>Strict-Transport-Security<\/code>. HSTS indica al navegador que use siempre HTTPS durante un periodo determinado.<\/p>\n<pre><code>&lt;IfModule mod_headers.c&gt;\nHeader always set Strict-Transport-Security \"max-age=31536000; includeSubDomains\"\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Pero cuidado: activar HSTS con <code>includeSubDomains<\/code> si no todos los subdominios soportan HTTPS puede causar problemas de acceso. Y enviar tu dominio a la lista de precarga HSTS de navegadores es todav\u00eda m\u00e1s serio. Es una puerta que se cierra con solemnidad; no conviene hacerlo mientras a\u00fan est\u00e1s buscando las llaves.<\/p>\n<h2 id=\"plantilla\">Plantilla base recomendada para redirecciones comunes \ud83e\uddf1<\/h2>\n<p>Esta plantilla combina canonicalizaci\u00f3n de HTTPS y dominio sin www, m\u00e1s redirecciones espec\u00edficas antes del bloque de WordPress. Ad\u00e1ptala con cuidado.<\/p>\n<pre><code># ==========================================================\n# Redirecciones 301 personalizadas - Apache .htaccess\n# Dominio can\u00f3nico: https:\/\/ejemplo.com\/\n# ==========================================================\n\nRewriteEngine On\n\n# 1. Forzar HTTPS y quitar www en una sola redirecci\u00f3n\nRewriteCond %{HTTPS} !=on [OR]\nRewriteCond %{HTTP_HOST} ^www\\.ejemplo\\.com$ [NC]\nRewriteRule ^ https:\/\/ejemplo.com%{REQUEST_URI} [R=301,L]\n\n# 2. Redirecciones espec\u00edficas\nRewriteRule ^pagina-antigua\/?$ https:\/\/ejemplo.com\/pagina-nueva\/ [R=301,L]\nRewriteRule ^servicios-viejos\/?$ https:\/\/ejemplo.com\/servicios\/ [R=301,L]\nRewriteRule ^blog-antiguo\/(.*)$ https:\/\/ejemplo.com\/blog\/$1 [R=301,L]\n\n# 3. Eliminar index.php o index.html\nRewriteCond %{THE_REQUEST} \\s\/+(.*\/)?index\\.(php|html?)\\s [NC]\nRewriteRule ^(.*\/)?index\\.(php|html?)$ https:\/\/ejemplo.com\/$1 [R=301,L]\n\n# BEGIN WordPress\n# Aqu\u00ed ir\u00eda el bloque generado por WordPress\n# END WordPress<\/code><\/pre>\n<p>    <strong>No copies plantillas a ciegas:<\/strong> cambia el dominio, revisa si quieres www o sin www, comprueba compatibilidad con tu hosting y prueba en un entorno seguro.<\/p>\n<h2 id=\"casos-avanzados\">Casos avanzados y matices que suelen pasarse por alto \ud83e\uddec<\/h2>\n<h3>Redirecciones en subdirectorios<\/h3>\n<p>Si tu <code>.htaccess<\/code> est\u00e1 dentro de un subdirectorio, los patrones de <code>RewriteRule<\/code> se interpretan relativos a ese directorio. Esto puede cambiar por completo el patr\u00f3n necesario. La misma regla en ra\u00edz y en <code>\/blog\/<\/code> no siempre significa lo mismo.<\/p>\n<h3>Multiidioma y hreflang<\/h3>\n<p>En sitios con idiomas, evita redirigir todo a una \u00fanica versi\u00f3n ling\u00fc\u00edstica. Si <code>\/en\/services\/<\/code> cambia, deber\u00eda apuntar a su equivalente en ingl\u00e9s, no a <code>\/es\/servicios\/<\/code> salvo que esa sea la estrategia deliberada. Adem\u00e1s, actualiza etiquetas <code>hreflang<\/code> para que no se\u00f1alen URLs antiguas.<\/p>\n<h3>Par\u00e1metros UTM<\/h3>\n<p>Los par\u00e1metros UTM suelen usarse para anal\u00edtica de campa\u00f1as. En muchas redirecciones conviene conservarlos para no perder atribuci\u00f3n. En otras, especialmente si generan duplicados indexables, puede ser mejor descartarlos. No hay receta universal: hay intenci\u00f3n, contexto y medici\u00f3n.<\/p>\n<h3>CDN y cach\u00e9s intermedias<\/h3>\n<p>Si usas Cloudflare, Fastly, Akamai u otra CDN, puede haber reglas de redirecci\u00f3n en la capa CDN antes de que la solicitud llegue a Apache. Esto no es malo; de hecho, suele ser eficiente. Pero debes saber d\u00f3nde vive cada regla. Una redirecci\u00f3n duplicada en CDN y <code>.htaccess<\/code> es como dos recepcionistas dando indicaciones distintas con absoluta confianza.<\/p>\n<h3>Alojamiento LiteSpeed<\/h3>\n<p>LiteSpeed es compatible en gran medida con reglas <code>.htaccess<\/code> de Apache, incluido <code>mod_rewrite<\/code>. Aun as\u00ed, algunos comportamientos pueden variar seg\u00fan configuraci\u00f3n. En hostings WordPress gestionados, revisa documentaci\u00f3n espec\u00edfica antes de culpar al archivo, al servidor o a Mercurio retr\u00f3grado.<\/p>\n<h2 id=\"auditoria\">Auditor\u00eda peri\u00f3dica de redirecciones: mantenimiento silencioso \ud83e\uddf9<\/h2>\n<p>Las redirecciones no se escriben una vez y se olvidan para siempre. Un sitio vivo cambia: se publican contenidos, se eliminan productos, se fusionan categor\u00edas, se redise\u00f1an slugs. Sin mantenimiento, el archivo <code>.htaccess<\/code> puede convertirse en un museo de decisiones antiguas, con vitrinas polvorientas y etiquetas que nadie entiende.<\/p>\n<h3>Qu\u00e9 revisar cada cierto tiempo<\/h3>\n<ul>\n<li>Redirecciones que ya no reciben tr\u00e1fico ni enlaces.<\/li>\n<li>Destinos que ahora devuelven 404 o 500.<\/li>\n<li>Cadenas generadas por cambios posteriores.<\/li>\n<li>Reglas duplicadas o contradictorias.<\/li>\n<li>Redirecciones temporales que deber\u00edan ser 301, o 301 que fueron pruebas.<\/li>\n<li>URLs antiguas detectadas en logs y no contempladas.<\/li>\n<\/ul>\n<p>Una auditor\u00eda trimestral puede bastar para sitios medianos. En ecommerce o medios con publicaci\u00f3n intensa, conviene revisar con mayor frecuencia.<\/p>\n<h2 id=\"faq\">Preguntas frecuentes sobre redirecciones 301 en .htaccess \u2753<\/h2>\n<h3>\u00bfUna redirecci\u00f3n 301 transfiere todo el SEO?<\/h3>\n<p>Transfiere se\u00f1ales importantes, especialmente si el destino es equivalente y la implementaci\u00f3n es limpia. Pero no es magia. Cambios de contenido, intenci\u00f3n de b\u00fasqueda, arquitectura interna, rendimiento y relevancia tambi\u00e9n influyen.<\/p>\n<h3>\u00bfPuedo tener muchas redirecciones 301?<\/h3>\n<p>S\u00ed, pero con orden. Unas decenas no suelen ser problema. Miles en <code>.htaccess<\/code> pueden afectar mantenimiento y rendimiento. Para grandes vol\u00famenes, conviene buscar soluciones m\u00e1s robustas.<\/p>\n<h3>\u00bfCu\u00e1nto tarda Google en reconocer una redirecci\u00f3n 301?<\/h3>\n<p>Depende de la frecuencia de rastreo, autoridad del sitio, profundidad de la URL y se\u00f1ales internas. Puede tardar desde d\u00edas hasta semanas. En migraciones grandes, la estabilizaci\u00f3n puede llevar m\u00e1s tiempo.<\/p>\n<h3>\u00bfDebo borrar la p\u00e1gina antigua despu\u00e9s de crear la redirecci\u00f3n?<\/h3>\n<p>Si la redirecci\u00f3n se gestiona en servidor, la URL antigua no necesita conservar contenido visible. Pero aseg\u00farate de que la regla funciona y de que el destino es correcto.<\/p>\n<h3>\u00bfEs mejor usar 301 o canonical?<\/h3>\n<p>No son equivalentes. Una redirecci\u00f3n 301 env\u00eda al usuario y al bot a otra URL. Una etiqueta canonical sugiere la versi\u00f3n preferida mientras la URL sigue siendo accesible. Si una URL ya no debe existir, usa 301. Si debe existir pero quieres consolidar se\u00f1ales, canonical puede ser adecuado.<\/p>\n<h3>\u00bfLas redirecciones 301 ralentizan mi sitio?<\/h3>\n<p>Cada redirecci\u00f3n a\u00f1ade una petici\u00f3n adicional. Una redirecci\u00f3n aislada es aceptable; cadenas largas o reglas ineficientes pueden afectar la velocidad. Lo ideal es enlazar internamente siempre al destino final.<\/p>\n<h2 id=\"resumen\">Cierre pr\u00e1ctico: la elegancia de llevar al usuario al lugar correcto \ud83e\udded<\/h2>\n<p>Crear redirecciones 301 efectivas con <code>.htaccess<\/code> en Apache no consiste en acumular l\u00edneas como quien colecciona llaves viejas. Consiste en entender intenci\u00f3n, permanencia, equivalencia y orden. Una buena redirecci\u00f3n protege el SEO, mejora la experiencia de usuario, evita errores 404 y mantiene viva la autoridad de enlaces que tanto cuesta ganar.<\/p>\n<p>La t\u00e9cnica importa: <code>Redirect 301<\/code> para casos simples, <code>RewriteRule<\/code> para patrones complejos, condiciones para evitar bucles, pruebas con <code>curl<\/code>, vigilancia en logs y coherencia con WordPress, HTTPS, canonical, sitemap y enlaces internos. Pero tambi\u00e9n importa cierta \u00e9tica del mantenimiento: no enviar a la gente a cualquier sitio, no esconder errores bajo una alfombra roja, no convertir la web en un pasillo de espejos.<\/p>\n<p>Porque una URL, aunque parezca poca cosa, es una promesa. Y una redirecci\u00f3n 301 bien hecha es la forma sobria, casi invisible, de cumplirla incluso cuando la direcci\u00f3n ha cambiado. \u2728<\/p>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfC\u00f3mo crear redirecciones 301 efectivas mediante el archivo .htaccess en Apache? \ud83e\udded Una redirecci\u00f3n 301<\/p>\n","protected":false},"author":1,"featured_media":3744,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-3745","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mantenimiento"],"_links":{"self":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3745","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/comments?post=3745"}],"version-history":[{"count":1,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3745\/revisions"}],"predecessor-version":[{"id":3746,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3745\/revisions\/3746"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media\/3744"}],"wp:attachment":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media?parent=3745"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/categories?post=3745"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/tags?post=3745"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}