WordPress redirige a otra web: encontrar y eliminar la redirección

Sus visitantes acaban en una página de lotería, de farmacia o de falso soporte técnico, y usted ve su web con normalidad. Es la firma de una redirección inyectada, en la mayoría de los casos condicional. Esta guía explica cómo reproducirla, encontrarla en los archivos o en la base de datos, y cerrar el acceso que sirvió para instalarla.

Publicado el 21 de septiembre de 2026 10 minutos de lectura

Todas las guías

Lo esencial

  1. Reproduzca la redirección como un visitante: ventana de navegación privada, teléfono con datos móviles, llegada desde un resultado de búsqueda.
  2. Haga una copia completa del sitio tal como está, archivos y base de datos, antes de modificar nada.
  3. Cambie las contraseñas del hosting, del FTP, de la base de datos y de los administradores de WordPress, y renueve después las claves de seguridad de wp-config.php.
  4. Busque la redirección en cuatro lugares: .htaccess, los archivos PHP, la base de datos y los ajustes de dirección del sitio.
  5. Retire también el acceso que la instaló: cuentas de administrador desconocidas, archivos PHP en wp-content/uploads, plugins que reinstalar o eliminar.
  6. Consulte el informe «Problemas de seguridad» de Google Search Console y solicite una revisión si el sitio aparece en él.

Por qué usted no ve la redirección

Una redirección instalada durante un hackeo elige a quién se aplica. En la mayoría de los casos deja tranquila a la persona que gestiona el sitio, para seguir activa el mayor tiempo posible. Las condiciones más habituales:

Un mensaje de un cliente que dice «su web me manda a otro sitio» merece tomarse en serio, aunque todo se vea bien en su pantalla.

Reproducir la redirección

Póngase en el lugar del visitante que la sufre:

  1. Abra una ventana de navegación privada, busque el nombre de su empresa en un buscador y haga clic en su resultado.
  2. Repita la prueba desde un teléfono, con datos móviles en lugar de wifi.
  3. Anote la dirección de destino, la hora y el dispositivo: estos tres datos le servirán al proveedor de hosting y, más adelante, en la solicitud de revisión a Google.

Si tiene acceso a un terminal, este comando pide su página de inicio haciéndose pasar por un iPhone que llega desde Google:

Terminal (en Windows, escriba curl.exe en lugar de curl)
curl -s -i -A "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)" -e "https://www.google.com/" https://www.su-sitio.com/

Lea las primeras líneas de la respuesta. Un código 301 o 302 seguido de una línea Location: hacia una dirección desconocida indica una redirección hecha por el servidor: está en .htaccess o en un archivo PHP. Un código 200 mientras el navegador sí es redirigido indica una redirección hecha dentro de la página, en JavaScript: suele estar en la base de datos o en un archivo del tema.

Antes de tocar el sitio: tres pasos

  1. Una copia completa, tal como está. Archivos y base de datos, con fecha, guardada fuera del servidor. Sirve de prueba, de punto de comparación y de red de seguridad si la limpieza retira algo útil.
  2. Las contraseñas, desde un dispositivo limpio. Área de cliente del proveedor de hosting, cuentas FTP o SFTP, usuario de la base de datos (copie la nueva en wp-config.php, constante DB_PASSWORD) y, después, cada cuenta de administrador de WordPress.
  3. Las claves de seguridad. Sustituya las ocho líneas de AUTH_KEY a NONCE_SALT de wp-config.php por un juego nuevo, generado en https://api.wordpress.org/secret-key/1.1/salt/. Todas las sesiones abiertas se cierran, incluida la del intruso.
Con WP-CLI, el tercer paso cabe en un comando
wp config shuffle-salts

Dónde se esconde la redirección

1. El archivo .htaccess

En la raíz del sitio, y a veces en una subcarpeta, .htaccess puede recibir reglas de reescritura añadidas por el intruso. El bloque que escribe el propio WordPress es corto, y va entre # BEGIN WordPress y # END WordPress:

El bloque que escribe WordPress en español para un sitio instalado en la raíz del dominio
# BEGIN WordPress
# Las directivas (líneas) entre «BEGIN WordPress» y «END WordPress» son
# generadas dinámicamente y solo deberían ser modificadas mediante filtros de WordPress.
# Cualquier cambio en las directivas que hay entre esos marcadores serán sobrescritas.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Una regla RewriteCond que comprueba %{HTTP_REFERER} (google, bing, facebook) o %{HTTP_USER_AGENT} (android, iphone, mobile), seguida de una RewriteRule hacia una dirección externa, es la redirección. Los plugins de caché y de seguridad también escriben sus propios bloques, marcados con su nombre: compare cada bloque con la lista de sus plugins antes de retirarlo.

2. Los archivos PHP

WP-CLI compara los archivos del núcleo de WordPress y de los plugins con las sumas de verificación que publica WordPress.org, y lista cada archivo modificado o añadido:

Terminal, en la raíz del sitio
wp core verify-checksums
wp plugin verify-checksums --all

El segundo comando cubre los plugins distribuidos por el directorio de WordPress.org. Un plugin comprado a su desarrollador se compara con una copia recién descargada desde su cuenta en la web del desarrollador. Es un caso frecuente: de los 540 sitios WordPress de pymes de nuestro análisis del 1 de septiembre de 2026, el 66 % lleva al menos un plugin ausente del directorio público.

Sin WP-CLI, dos búsquedas dan una primera criba:

Terminal, en la raíz del sitio
find . -name "*.php" -mtime -30
find wp-content/uploads -name "*.php"

La primera lista los archivos PHP modificados en los últimos 30 días; la segunda, los archivos PHP guardados en la carpeta de medios, donde son sospechosos por defecto (algunos plugins dejan ahí un index.php vacío, que es legítimo). Una fecha de modificación se puede falsificar: un archivo antiguo sigue mereciendo un examen si está en el lugar equivocado.

Abra primero wp-config.php, el index.php de la raíz, el functions.php y el header.php del tema activo, y la carpeta wp-content/mu-plugins: los plugins que contiene se cargan siempre y no se pueden desactivar desde la administración. Las señales que buscar: eval(, base64_decode(, gzinflate(, str_rot13(, cadenas largas ilegibles, o window.location seguido de una dirección que usted no conoce.

3. La base de datos

Una redirección en JavaScript se inserta a menudo en el contenido de las páginas o en los ajustes, donde ningún archivo la muestra. WP-CLI busca una cadena en todas las tablas de WordPress:

Terminal
wp db search "<script"
wp db search "fromCharCode"

Sin WP-CLI, las mismas búsquedas se lanzan en phpMyAdmin, pestaña SQL:

SQL (sustituya wp_ por el prefijo definido en wp-config.php, variable $table_prefix)
SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%';
SELECT option_name FROM wp_options WHERE option_value LIKE '%<script%';

Algunos resultados son legítimos: una herramienta de analítica, un banner de cookies o un widget que usted ha añadido. Lo que no corresponde a nada de lo que ha instalado merece un examen, en especial un script que construye una dirección a partir de códigos de caracteres.

4. Los ajustes de dirección y las cuentas

En Ajustes > Generales, «Dirección de WordPress (URL)» y «Dirección del sitio (URL)» deben llevar su dominio. Los mismos valores pueden imponerse en wp-config.php con las constantes WP_HOME y WP_SITEURL: compruebe los dos lugares.

Terminal
wp option get home
wp option get siteurl
wp user list --role=administrator

Cuando las constantes están definidas, los dos primeros comandos devuelven su valor. El último lista los administradores con su fecha de registro; en la administración, la misma lista se obtiene desde el menú Usuarios, con el filtro Administrador. Una cuenta que nadie reconoce se elimina, atribuyendo su contenido a una cuenta legítima.

Retirar la redirección y, después, el acceso que la instaló

Borrar la línea que redirige detiene el síntoma. El acceso que usó el intruso sigue abierto mientras no se encuentre, y la redirección vuelve en los días siguientes. El orden que funciona:

  1. Sustituya los archivos del núcleo por una copia nueva: elimine las carpetas wp-admin y wp-includes y lance después wp core download --skip-content --force, que reescribe el núcleo sin tocar sus plugins, temas y medios. El comando sobrescribe los archivos existentes, pero no elimina ningún archivo añadido: por eso las dos carpetas se eliminan primero, y por eso los archivos PHP desconocidos de la raíz se retiran a mano.
  2. Reinstale el tema y cada plugin desde su fuente oficial, y elimine los que el sitio ya no usa, desactivados incluidos: sus archivos siguen en el servidor.
  3. Retire los archivos PHP ajenos de wp-content/uploads, las reglas añadidas a .htaccess y los scripts encontrados en la base de datos.
  4. Revise las tareas programadas con wp cron event list: una tarea con un nombre desconocido puede volver a instalar el código.
  5. Actualice WordPress, el tema y los plugins.
  6. Repita las pruebas del principio, desde varios dispositivos y durante varios días.

Si el sitio guarda datos personales (formularios, cuentas de clientes, pedidos), anote la hora a la que detectó el hackeo. En la Unión Europea, el RGPD prevé notificar una violación de la seguridad de los datos personales a la autoridad de control a más tardar 72 horas después de haber tenido constancia de ella, a menos que sea improbable que dicha violación constituya un riesgo para los derechos y las libertades de las personas físicas.

Google, y lo que ven sus visitantes

Cuando Google detecta la redirección, Chrome puede mostrar una página roja «Sitio peligroso» antes de abrir el sitio, y Google puede escribir bajo su resultado «Este sitio puede haber sido pirateado». El informe Problemas de seguridad de Google Search Console indica lo que se ha detectado y en qué direcciones. Una vez limpio el sitio, el botón Solicitar revisión pone en marcha la comprobación.

Un sitio retomado y mantenido, después de la redirección

Una redirección retirada deja una pregunta: ¿quién se ocupa del sitio a partir de ahora? Simafri retoma su sitio WordPress, lo pone de nuevo en línea sobre una base que alojamos, protegemos y mantenemos al día, y se ocupa de él mes tras mes. Usted conserva su nombre de dominio y su contenido.

Quiero que retomen mi sitio

Preguntas frecuentes

¿Por qué mi web WordPress solo redirige en el móvil?

El código inyectado lee el User-Agent del navegador y solo redirige a los teléfonos. La persona que gestiona el sitio, a menudo desde un ordenador, no ve nada. Haga la prueba desde un teléfono con datos móviles, o con curl enviando el identificador de un navegador móvil.

¿Basta con reinstalar WordPress para eliminar la redirección?

Reinstalar el núcleo reescribe los archivos de WordPress, sin eliminar los que un intruso haya podido añadir. La base de datos, el tema, los plugins y la carpeta de medios quedan como estaban, y es ahí donde suelen encontrarse la redirección y el acceso del intruso. El núcleo nuevo es un paso de la limpieza, que se completa con la base de datos, los plugins, las cuentas y las contraseñas.

El sitio se ha limpiado, ¿por qué vuelve la redirección?

Porque el acceso que sirvió para instalarla sigue ahí: una cuenta de administrador añadida, un archivo PHP escondido entre los medios, una tarea programada, un plugin vulnerable. Cada uno permite volver a instalar el código después de la limpieza. Revise las cuentas, la carpeta wp-content/uploads, las tareas programadas y las versiones de los plugins, y cambie de nuevo las contraseñas.

¿Cómo sé si Google ha detectado la redirección?

Abra Google Search Console y el informe Problemas de seguridad: lista los problemas detectados y ejemplos de URL afectadas. Si el sitio aún no está verificado en Search Console, la verificación mediante un registro DNS cubre todo el dominio.

Contáctenos