<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Ayuda WordPress</title>
	<atom:link href="https://ayudawp.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://ayudawp.com</link>
	<description>Recursos, temas, plugins, tutoriales en español</description>
	<lastBuildDate>Wed, 29 Jul 2026 15:11:52 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://ayudawp.com/wp-content/uploads/2026/05/cropped-ayuda-wordpress-32x32.png</url>
	<title>Ayuda WordPress</title>
	<link>https://ayudawp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><item>
		<title>Seguridad WordPress en piloto automático: protege tu web cuando no estás</title>
		<link>https://ayudawp.com/seguridad-wordpress-piloto-automatico/</link>
					<comments>https://ayudawp.com/seguridad-wordpress-piloto-automatico/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 06:28:14 +0000</pubDate>
				<category><![CDATA[Seguridad WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Principiante]]></category>
		<category><![CDATA[Vigilante]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159988</guid>

					<description><![CDATA[No siempre estás para vigilar tu web, así que aquí tienes una guía con la que poner en autopilot la seguridad de WordPress.]]></description>
										<content:encoded><![CDATA[<p>Tu web trabaja sola cuando tú no estás, el problema es que los que intentan reventarla también.</p>
<p>En agosto en la playa, en Navidad entre turrones, en ese puente que llevas esperando desde marzo, o un martes cualquiera si eres freelance y lo llevas todo tú solo, tu WordPress sigue ahí, abierto al mundo, recibiendo <strong>visitas de personas y de bots a partes iguales</strong> (y estoy siendo generoso con las personas).</p>
<p><strong>Los ataques a WordPress son automáticos en su inmensa mayoría</strong>, scripts que escanean millones de webs buscando la misma vulnerabilidad conocida, sin descanso, sin vacaciones y sin cogerse el puente de diciembre, así que <strong>la defensa también puede, y debe, ser automática</strong>.</p>
<p>Y esa es la buena noticia que vengo a contarte, que <strong>la seguridad de un WordPress no necesita que estés delante, necesita que la dejes bien montada</strong>.</p>
<p>Copias que se hacen y se comprueban solas, actualizaciones con red de seguridad, vigilancia que escanea sin que se lo pidas y alertas que solo te escriben cuando pasa algo de verdad, a eso es a lo que le llamo yo <strong>poner la seguridad en piloto automático</strong>.</p>
<p>Y ojo, que esto no va solo de vacaciones, va de cualquier web desatendida, y <strong>desatendida es toda web cuyo dueño tiene una vida, un trabajo, clientes o las tres cosas a la vez</strong>.</p>
<p>Si eres autónomo y no tienes a nadie detrás revisando registros de actividad (nadie revisa registros a diario, tranquilo, ni yo), este artículo es para ti los 365 días del año, no solo cuando haces la maleta.</p>
<p>Vamos a verlo de a poquito, en modo fácil, que ya sabes que soy cortito y explico las cosas como si fuesen para mi. Al final, por si no te apetece leer (ni aprender, tú verás) te dejo la lista de comprobación completa, la de cerrar la casa antes de irte de viaje.</p>
<h2>Qué puedes automatizar, qué puedes delegar y qué te toca a ti</h2>
<p>Cada tarea de seguridad de esta guía acaba en uno de tres sitios. O la haces tú una sola vez y se queda hecha, o la hace una máquina por ti cada día, o la hace otra persona por ti. <strong>Lo que no puede ser es que la seguridad de tu web dependa de que tú te acuerdes</strong>, porque no te vas a acordar, yo tampoco, y me dedico a esto.</p>
<p>¿Y quién es esa otra persona en la que delegar?</p>
<p>Pues según el caso, <strong>tu hosting, que si lo eliges bien hace bastante</strong> más de lo que crees, <strong>un buen plugin de seguridad</strong> bien configurado, o directamente <strong>un servicio de mantenimiento profesional</strong> como el que ofrecemos en <a href="https://mantenimiento.ayudawp.com/" target="_blank" rel="noopener">mantenimiento.ayudawp.com</a>, que viene a ser el vecino de confianza al que le dejas una copia de las llaves, solo que este sabe de WordPress y no tienes que traerle imanes de nevera a la vuelta.</p>
<p>Para que no te pierdas, cada sección termina con dos líneas, lo que se automatiza y lo que se puede delegar, y en quién. Empezamos por donde hay que empezar siempre.</p>
<h2>Lo primero, siempre: copias de seguridad automáticas</h2>
<p>Antes de tocar un solo ajuste, antes de actualizar nada, antes incluso de seguir leyendo, asegúrate de esto, porque <strong>la copia de seguridad es el paso previo de cualquier cambio y la última red cuando todo lo demás falla</strong>.</p>
<p>Si el cortafuegos no para el ataque, si una actualización rompe la web, si borras lo que no debías, <strong>un backup es lo que te devuelve el negocio a su sitio</strong>.</p>
<p>La regla de oro se llama 3-2-1, tres copias de tus datos, en dos soportes distintos y al menos una fuera del servidor de tu web, porque si tu única copia vive en el mismo servidor que la web y el servidor revienta, te quedas sin web y sin copia a la vez, bonito plan.</p>
<p>Sobre todo es importante <strong>que la copia sea completa, con todos los archivos imprescindibles y la base de datos</strong>, que he visto más de una «copia» que solo guardaba los archivos y dejaba fuera la base de datos, donde viven tus entradas, tus pedidos y tus usuarios, o sea, todo lo que importa, todo eso que no puedes descargar ni encargárselo a una IA.</p>
<p><strong>Cómo se automatizan las copias de seguridad</strong> fácil y (casi) gratis:</p>
<ol>
<li><strong>Las copias diarias de tu hosting</strong>, que los buenos las hacen sin que se lo pidas y te dejan además lanzar copias adicionales a mano antes de un cambio gordo.</li>
<li><strong>Al menos otra copia externa</strong> programada con un plugin de backups hacia otro sitio, tu Google Drive, un Dropbox, un almacenamiento S3, donde quieras, pero fuera del servidor.</li>
</ol>
<p>Con esas dos patas la ejecución queda resuelta sin que muevas un dedo, y la frecuencia la marca tu web, semanal para una web que apenas cambia, diaria como mínimo para un blog activo. En una tienda con pedidos entrando piénsate incluso algo más frecuente para la base de datos, que <strong>cada hora de diferencia son pedidos que podrías perder en una restauración</strong>.</p>
<p>Lo único que no se automatiza del todo es comprobar que la copia sirve de algo si la necesitases. <strong>Un backup que nunca has probado si se restaura bien es una promesa, pero aún no sabes si es una copia de seguridad.</strong></p>
<p>Antes de relajarte restaura una en un entorno de pruebas o en local, cronométralo y apunta los pasos, porque cuando la necesites de verdad no querrás estar aprendiendo a restaurar con la web caída y el móvil al 12% de batería.</p>
<p>Tengo publicada una <a href="https://ayudawp.com/copias-seguridad-wordpress/">guía completa de copias de seguridad en WordPress</a> con métodos y herramientas para cada caso, así que aquí no me extiendo más.</p>
<ul>
<li><strong>En piloto automático:</strong> las copias diarias del hosting y una copia externa programada fuera del servidor.</li>
<li><strong>Delegable:</strong> en tu hosting la ejecución diaria, y en un servicio de mantenimiento que además verifique las copias y haga restauraciones de prueba de vez en cuando.</li>
</ul>
<h2>Accesos: menos llaves repartidas y mejores cerraduras</h2>
<p>Piensa en cuánta gente tiene llaves de tu casa y desde cuándo, pues con tu WordPress pasa igual, pero peor, porque <strong>las llaves digitales no caducan solas</strong>. Ahí siguen el usuario del diseñador que pasó por la web en 2019, el de aquella agencia que probaste tres meses y el <code>admin2</code> que ya ni recuerdas quién creó.</p>
<p><strong>Cada usuario es una puerta abierta</strong>, y cada puerta con privilegios de administrador es una puerta blindada con la llave puesta por dentro si la contraseña es mala. La limpieza es manual pero de una sola vez.</p>
<p>Entra en la pantalla de gestión de usuarios de tu WordPress, <strong>borra los que no reconozcas o no se usen</strong> (WordPress te preguntará a quién reasignar sus contenidos, así que no pierdes nada) y <strong>baja privilegios a todo el que no necesite ser administrador</strong>, que un editor publica y edita perfectamente sin poder instalar plugins ni tocar ajustes.</p>
<p>El resto sí se queda funcionando en automático, a saber:</p>
<ul>
<li><strong>Contraseñas únicas</strong> y largas guardadas en un gestor de contraseñas</li>
<li><strong>Identificación en dos pasos</strong> activada y a poder ser forzada para todos los que acceden (el famoso 2FA, ese código del móvil que hace que <strong>aunque te roben la contraseña no puedan entrar sin tu teléfono</strong>)</li>
<li><strong>Protección contra fuerza bruta</strong> que bloquee sola las IPs que prueban contraseñas en cadena.</li>
</ul>
<p>Todo eso lo hace gratis cualquier plugin de seguridad serio, y una vez configurado no vuelve a pedirte nada.</p>
<p>Y <strong>ya que estás con la limpieza, aplícala también al código</strong>. Los plugins desactivados y los temas antiguos que guardas «por si acaso» siguen siendo archivos presentes en tu servidor, y algunos agujeros se explotan aunque el plugin esté desactivado.</p>
<p><strong>Menos código instalado es menos superficie de ataque</strong>, así que borra lo que no uses y deja un solo tema de reserva de los oficiales, por si toca descartar problemas algún día.</p>
<ul>
<li><strong>En piloto automático:</strong> el bloqueo de fuerza bruta, el 2FA forzado y las políticas de contraseñas.</li>
<li><strong>Delegable:</strong> la auditoría de usuarios, permisos y plugins sobrantes, que es de lo primero que se revisa en cualquier puesta a punto profesional.</li>
</ul>
<h2>Ajustes de una sola vez que trabajan para siempre</h2>
<p>Hay una parte de la seguridad WordPress que es puro «<strong>configurar y olvidarte</strong>», el famoso <strong><em>hardening</em></strong> (refuerzo, vaya), y es la más agradecida para una web desatendida porque <strong>no genera avisos, ni mantenimiento, ni nada</strong>, lo activas y ya está.</p>
<p>Lo esencial cabe en <strong>cuatro acciones</strong>:</p>
<ol>
<li><strong>Desactivar la edición de archivos</strong> desde el escritorio de WordPress, para que si alguien entra con una cuenta robada no pueda reescribirte el tema desde dentro, que es una línea en <code>wp-config.php</code> y listo.</li>
<li><strong>Cerrar <code>xmlrpc.php</code> si no lo usas</strong>, un protocolo de acceso remoto de otra época que hoy casi nadie necesita y que los bots adoran.</li>
<li><strong>Añadir cabeceras de seguridad</strong>, unas instrucciones que tu servidor manda al navegador para evitar cosas feas, como que otra web meta la tuya en un marco invisible para robarle los clics a tus visitantes.</li>
<li><strong>Proteger de miradas ajenas los archivos sensibles</strong> de la instalación.</li>
</ol>
<p>¿Quieres hacerlo a mano y gratis? En las <a href="https://herramientas.ayudawp.com/">herramientas gratuitas para WordPress</a> tienes generadores de <a href="https://herramientas.ayudawp.com/wpconfig/">wp-config.php</a>, de <a href="https://herramientas.ayudawp.com/htaccess/">.htaccess</a> y de <a href="https://herramientas.ayudawp.com/security-headers/">cabeceras de seguridad</a> que te montan el código marcando opciones, copiar, pegar y hasta luego <em>maricarmen</em>.</p>
<p><strong>¿Prefieres que lo haga un plugin?</strong> Pues aquí presento al que va a salir varias veces en lo que queda de artículo, <a href="https://vigilante.works/es/">Vigilante</a>, ese pedazo de plugin de seguridad, gratuito del todo y sin versión de pago, que <strong>aplica todo este refuerzo de manera sencilla y casi por defecto</strong>.</p>
<p>Y con un detalle especialmente importante para el que va a dejar la web sola, y es que antes de tocar <code>wp-config.php</code>, <code>.htaccess</code> o <code>robots.txt</code> el plugin hace <strong>copia de los archivos originales con verificación de integridad</strong>, y si un día lo desactivas lo restaura todo como estaba.</p>
<p>Más majo él, hasta cuando tú decides no darle el cariño que merece te cuida, y luego tú criticando.</p>
<p>Cualquier <strong>plugin de seguridad serio bien configurado</strong> te cubre buena parte de esta guía, y tienes una <a href="https://vigilante.works/es/comparativa.html">comparativa función a función de los plugins de seguridad</a> más conocidos por si quieres elegir con datos, casi sin opiniones.</p>
<ul>
<li><strong>En piloto automático:</strong> todo, esa es la gracia. Se configura una vez y las reglas se mantienen solas.</li>
<li><strong>Delegable:</strong> en un profesional para una puesta a punto única, un par de horas de trabajo que se quedan hechas para siempre.</li>
</ul>
<h2>Actualizaciones automáticas, sí, no te quejes, que es gratis</h2>
<p>Aquí llega <strong>el debate más bobo del mundo WordPress</strong>, entre el «actualiza siempre al momento» y el «si no está roto no lo toques». Ambps dos bandos tienen (algo de) razón, pero ninguno la tiene del todo.</p>
<h3>Lo que WordPress trae de serie</h3>
<p>Desde la versión 3.7, allá por 2013, seguro que ni te acuerdas, <strong>WordPress se actualiza solo en las versiones menores, las de seguridad y mantenimiento</strong>, y eso déjalo como está, que ha salvado muchas más webs de las que ha roto.</p>
<p>Y desde la versiób 5.5 puedes activar además actualizaciones automáticas por cada plugin y cada tema desde el propio escritorio, con su enlace al lado de cada uno en el listado.</p>
<p>El problema de la vía nativa es que <strong>actualiza a pelo, sin copia previa, sin comprobar después si la web sigue viva, sin marcha atrás si algo peta</strong>. De este modo, si un plugin rompe tu web un sábado a las tres de la madrugada, <strong>te enteras el lunes por un cliente, o no te enteras, que es peor</strong>.</p>
<h3>Los pros y los contras</h3>
<p>A favor de automatizar hay un dato que lo aplasta casi todo, y es que <strong>la inmensa mayoría de los hackeos de WordPress explotan vulnerabilidades conocidas que ya tenían arreglo publicado</strong>.</p>
<p>Nada de hazañas de película ni ataques dirigidos a tu web en concreto, sino <strong>puertas que llevaban semanas con el parche disponible sin que nadie lo aplicara</strong>. Una web sin actualizar durante un mes de vacaciones es exactamente eso, un escaparate de puertas conocidas con el cartel de «pasen y vean».</p>
<p>En contra, lo que ya sabes si llevas tiempo en esto. <strong>Una actualización puede romper la web</strong>, por incompatibilidades entre plugins, por un tema que no sigue el ritmo, por lo que sea, y romperla sin nadie delante para enterarse. Además <strong>los plugins premium comprados fuera del directorio oficial van por libre</strong>, cada uno con su sistema de licencias, así que la automatización nativa ni los ve.</p>
<p>Si eres del bando manual tienes más razón que un santo en una cosa, actualizar a ciegas y sin red es jugar a la ruleta. Pero la conclusión correcta es otra: <strong>automatizar sí, pero con red</strong>.</p>
<h3>Automatizar con red, lo que hace un buen hosting</h3>
<p>La red existe y la ponen algunos hosting, yo te cuento cómo lo hace <a href="https://www.siteground.es/go/ayudawp">SiteGround</a>, que es el que uso y recomiendo desde hace años, con su herramienta de <a href="https://es.siteground.com/tutoriales/primeros-pasos/actualizaciones-automaticas-wordpress/">actualización automática</a> de las Site Tools, pero seguramente habrá más que también lo hacen bien.</p>
<p>Antes de cada actualización hace una copia de seguridad, después comprueba automáticamente que la web funciona y, si detecta un problema, revierte los cambios y te avisa. Puedes decidir <strong>con qué margen se aplican las versiones mayores y las menores</strong>, y además también actualizar los plugins del directorio oficial que tengas desactualizados.</p>
<p>O sea, que el escenario de pesadilla del bando manual, la web rota un mes entero sin que nadie se entere, con este sistema se convierte en un email que viene a decir «lo intenté, algo no cuadraba y lo he dejado como estaba». Así la cosa cambia del todo, ahora sí hay red de seguridad.</p>
<p>Y si quieres el control fino, el entorno de pruebas (el <em>staging</em> de toda la vida) te deja ensayar las actualizaciones gordas en una copia de la web antes de aplicarlas en la real. Es la opción de matrícula de honor para antes de un parón largo, <strong>actualizas todo en el entorno de pruebas, compruebas que nada se rompe y lo pasas a producción</strong>.</p>
<h3>Qué y cómo actualizar según el tipo de web</h3>
<p>Esto, como todo, es mi opinión, pero también como todo, basado en mi experiencia, yo te lo cuento y tú decides.</p>
<p>En un blog o web corporativa no veo problema alguno para tener actualizaciones automáticas con red para todo y a disfrutar de la vida.</p>
<p>En una tienda online, con WooCommerce, las menores y las de seguridad automáticas siempre, pero las versiones mayores de WooCommerce, de la pasarela de pago y del tema, mejor con entorno de pruebas o a mano en horario controlado.</p>
<p>Y es que una tienda caída o rota no son visitas perdidas, son pedidos que vuelan, dinero que no entra, y el proceso de compra tiene demasiadas piezas delicadas como para actualizarlo a ciegas en mitad de una campaña.</p>
<p>Por resumir:</p>
<ul>
<li><strong>En piloto automático:</strong> las actualizaciones menores de WordPress (seguridad y manteniento) siempre, y todo lo demás con un sistema que haga copia previa, verificación y marcha atrás.</li>
<li><strong>Delegable:</strong> en tu hosting si tiene actualización inteligente, o en un servicio de mantenimiento, que además se ocupa de lo que la automatización no cubre, como los plugins premium y las versiones mayores con su entorno de pruebas.</li>
</ul>
<h2>Un vigilante no se coge vacaciones</h2>
<p>Con la casa cerrada y las actualizaciones con red, falta el sistema de alarma, la parte que mira cuando tú no miras. Y aquí es donde el piloto automático se luce de verdad, porque <strong>casi todo lo importante de la vigilancia moderna funciona solo</strong>.</p>
<blockquote><p>La seguridad que funciona es la que se revisa sola, sin esperar a que tú te acuerdes.</p></blockquote>
<p>El cortafuegos y el bloqueo de fuerza bruta deben funcionar sin ti por defecto, filtrando peticiones maliciosas y bloqueando IPs a cualquier hora, da igual el sistema que apliques (CDN, plugin, hosting, todos a. la vez).</p>
<p>Ahora bien, la vigilancia que a mí me deja dormir tranquilo es otra, la de integridad, porque <strong>el malware moderno no se ve desde fuera</strong>.</p>
<p>Me refiero a la situación en que la web carga normal, el escritorio parece normal, y mientras tanto hay un archivo PHP colado en tu carpeta de subidas haciendo cosas raras, o una puerta trasera escondida en un plugin.</p>
<p>La única forma fiable de pillarlo es comparar, y comparar es justo lo que las máquinas hacen mejor que nosotros, <strong>comprobar el núcleo de WordPress contra las sumas de verificación oficiales, revisar los archivos de plugins y temas</strong>, y escanear la carpeta <code>uploads</code> buscando <strong>PHP donde solo debería haber imágenes</strong>.</p>
<p>Otra bomba de relojería silenciosa de la web desatendida son los <strong>plugins cerrados o abandonados</strong>, esos que WordPress.org retira del directorio por <strong>una vulnerabilidad sin arreglar o por abandono del autor</strong>, y que en tu web siguen instalados y activos tan campantes, porque nadie te avisa. Salvo que algo te avise, claro.</p>
<p>Esto último <a href="https://ayudawp.com/ataques-cadena-suministro-plugins/" target="_blank" rel="noopener">lo añadí a Vigilante justo después de que nos enterásemos de que alguien había colado puertas falsas en decenas de plugins</a> en el directorio oficial. Gracias, o por culpa de eso, <strong>detecta los plugins cerrados y te dice además el motivo</strong> del cierre, que no es lo mismo «el autor lo dejó» que «tiene un agujero de seguridad sin parche».</p>
<p>Y el ejemplo que mejor resume la filosofía de todo este artículo es el <strong>analizador de seguridad</strong> de <a href="https://es.wordpress.org/plugins/vigilante/">Vigilante</a>, más de 40 comprobaciones con una puntuación de 0 a 100 que <strong>se ejecuta sola cada semana y únicamente te manda un email si la puntuación baja de verdad</strong>.</p>
<p>Ni resúmenes diarios que acabas ignorando, ni silencio absoluto, un vigilante que solo te llama si hay algo que contar, así se hace el <strong>piloto automático bien hecho</strong>.</p>
<p>El <strong>registro de actividad</strong> completa el arsenal, y no para que lo leas cada día (no lo vas a leer, y no pasa nada), sino para que a la vuelta puedas <strong>reconstruir qué ha pasado, quién entró, qué se instaló, qué cambió y cuándo</strong>.</p>
<p>Antes de que te relajes, por si no te has dado cuenta, los escáneres de seguridad están incorporando inteligencia artificial para detectar comportamientos anómalos en lugar de limitarse a firmas conocidas, un salto interesante que ya conté a fondo en mi artículo sobre <a href="https://ayudawp.com/seguridad-wordpress-ia/">seguridad WordPress con inteligencia artificial</a>.</p>
<p>Otra amenaza que conviene vigilar también desde fuera, y para eso tienes dos opciones gratuitas, el <a href="https://herramientas.ayudawp.com/security-check/">análisis de seguridad WordPress</a> online, que pasa más de 30 comprobaciones externas a tu web sin instalar nada (hazlo antes de irte, guarda la puntuación y repítelo a la vuelta), y un servicio de monitorización de disponibilidad tipo <a href="https://uptimerobot.com/">UptimeRobot</a>, que te avisa al momento si la web se cae, que es lo primero que notarías si estuvieras delante y lo último que descubres si no lo estás.</p>
<ul>
<li><strong>En piloto automático:</strong> cortafuegos, escaneos de integridad y malware, detección de plugins cerrados, análisis semanal con aviso solo si empeora, y monitorización de disponibilidad.</li>
<li><strong>Delegable:</strong> la interpretación y la reacción. Que las alertas las reciba y las resuelva un servicio de mantenimiento, y a ti te llegue solo el resumen.</li>
</ul>
<h2>Alertas: pocas y claras</h2>
<p>La trampa clásica del que monta todo esto con ganas es activar todas las notificaciones de todos los sistemas. El resultado son veinte emails a la semana de cosas irrelevantes, tu cerebro los archiva como ruido y el día que llega el importante ni lo abres.</p>
<p><strong>Si todo avisa, nada avisa</strong>, es el cuento de Pedro y el lobo, versión bandeja de entrada.</p>
<p>Mi recomendación es quedarte con cuatro alertas de verdad y mandar a resumen semanal, o directamente silenciar, todo lo demás. La caída de la web, una actualización automática que ha fallado y se ha revertido, la bajada de la puntuación del análisis semanal de seguridad, y cualquier detección de malware o cambio de integridad en archivos.</p>
<p>Y <strong>haz pruebas de todo</strong> antes de relajarte. Provoca un aviso de prueba o comprueba en el histórico que los emails llegan y no acaban en la carpeta de spam, que sería el colmo, el vigilante gritando y tú con los cascos puestos.</p>
<ul>
<li><strong>En piloto automático:</strong> el filtrado. Se configura una vez qué avisa y qué calla.</li>
<li><strong>Delegable:</strong> el buzón entero. En un servicio de mantenimiento las alertas las recibe quien las va a resolver, y a ti solo te llega lo que necesita tu decisión.</li>
</ul>
<h2>Recomendaciones de seguridad que valen poquito</h2>
<p>Hay medidas que se venden mucho y protegen poco, y en una web desatendida cada pieza de más es una pieza que puede fallar sola.</p>
<p>La primera, <strong>no apiles plugins de seguridad</strong> «por si acaso». Duplican reglas de cortafuegos, bloqueos de acceso y cabeceras, y el resultado suelen ser falsos positivos, avisos por duplicado y webs rotas, justo lo contrario de lo que buscas cuando no vas a estar delante. <strong>Elige uno que tenga de todo y bueno, configúralo bien y a otra cosa</strong>.</p>
<p>La segunda, ocultar la versión de WordPress es más cosmética que otra cosa. Los bots no leen tu número de versión y deciden educadamente si atacar, prueban el exploit directamente contra millones de webs y a ver cuál cae. <strong>Lo que te protege es actualizar y no tener la vulnerabilidad</strong>, por mucho cartel que escondas.</p>
<p>Y la tercera, la más importante, <strong>no tomes decisiones de seguridad por miedo</strong>, ni por el email alarmista de turno ni por el vendedor que te asegura que sin su suscripción premium tu web está condenada.</p>
<p><strong>Lo que de verdad para los ataques es aburridísimo</strong> (copias, actualizaciones, accesos limpios y vigilancia automática, todo lo que llevamos visto) pero lo mejor es que es casi todo gratis o viene incluido en un buen hosting.</p>
<h2>Plan B, por si aun así pasa algo</h2>
<p>Todo lo anterior reduce muchísimo la probabilidad de sustos, pero <strong>el riesgo cero no existe</strong>, así que deja preparado el plan B, que consiste en <strong>poder reaccionar desde donde sea y cuándo haga falta</strong>, sin tener que acordarte de nada de memoria.</p>
<p>Tres escenarios más que probables:</p>
<ul>
<li><strong>Si la web se cae</strong> entra en el panel de tu hosting, desde el navegador del móvil si no tienes otra cosa, y restaura la última copia buena, que para eso practicaste la restauración y apuntaste los pasos.</li>
<li><strong>Si ves un ataque en curso</strong>, con intentos de acceso masivos o tráfico raro, activa el modo «bajo ataque» de tu plugin de seguridad o de Cloudflare, que refuerza temporalmente los accesos mientras dura la tormenta.</li>
<li><strong>Si confirmas un hackeo</strong>, restaura la copia anterior al desastre, cambia todas las contraseñas y abre ticket con el soporte de tu hosting, que para eso pagas y además saben seguro más que tú y yo juntos, porque ellos ven estas cosas a diario.</li>
</ul>
<p>Para que todo eso sea posible desde cualquier parte, <strong>deja apuntado antes de confiarte</strong>, en tu gestor de contraseñas, el acceso al panel del hosting, dónde están las copias y cómo se restauran, el canal de soporte y el teléfono de la persona a la que llamarás si prefieres no tocar nada.</p>
<p>Volvemos al vecino con la copia de las llaves, y si ese vecino no existe, para eso están los <a href="https://mantenimiento.ayudawp.com/">servicios de mantenimiento</a>, que en el fondo son eso, el teléfono <strong>al que llamas para no tener que ser tú quien apague el fuego</strong> o al menos no hacerlo a solas. No es su función principal, que es más la prevención, pero también cuando hay problemas deben demostrar que elegiste bien.</p>
<ul>
<li><strong>En piloto automático:</strong> nada, esta parte es tuya, pero se deja preparada en diez minutos.</li>
<li><strong>Delegable:</strong> entera. Tener mantenimiento contratado es exactamente esto, que el plan B sea el teléfono de otro.</li>
</ul>
<h2>Lista de comprobación de seguridad en piloto automático</h2>
<p>Cuando sales de viaje cierras la llave del gas, bajas las persianas, pones alguna luz con temporizador, conectas la alarma y le dejas las llaves a alguien de confianza. Pues con tu web, exactamente igual.</p>
<p>Aquí tienes la lista completa, pensada para hacerla en una tarde. Imprímela, guárdala o pásala a tu gestor de tareas, pero repásala entera antes de cada parón, y una vez al trimestre aunque no te vayas a ningún sitio, que como decíamos al principio, la web desatendida no entiende de calendarios.</p>
<p><strong>Previsión obligatoria antes del piloto automático de seguridad:</strong></p>
<ul>
<li>Restaura una copia de seguridad de prueba y apunta los pasos y el tiempo que te llevó.</li>
<li>Comprueba que la copia externa programada existe, es completa (archivos y base de datos) y se guarda fuera del servidor.</li>
<li>Borra los usuarios que no se usen y baja privilegios a quien no necesite ser administrador.</li>
<li>Activa la identificación en dos pasos para todos los que acceden a la web.</li>
<li>Borra los plugins desactivados y los temas que no uses, dejando solo uno oficial de reserva.</li>
<li>Aplica el refuerzo: edición de archivos desactivada, XML-RPC cerrado si no lo usas y cabeceras de seguridad puestas.</li>
<li>Actualiza todo a mano una última vez, núcleo, plugins, temas y traducciones.</li>
<li>Configura las actualizaciones automáticas con red, copia previa, comprobación posterior y marcha atrás.</li>
<li>Pasa el análisis de seguridad externo, corrige lo que salga en rojo y guarda la puntuación para comparar a la vuelta.</li>
<li>Revisa las notificaciones, deja sonando solo las cuatro importantes y mándate un aviso de prueba.</li>
</ul>
<p><strong>Las medidas de seguridad imprescindibles en piloto automático:</strong></p>
<ul>
<li>Copias diarias del hosting más la copia externa programada.</li>
<li>Actualizaciones automáticas con copia previa y reversión si algo falla.</li>
<li>Cortafuegos y bloqueo de fuerza bruta.</li>
<li>Escaneo de integridad de archivos y detección de malware.</li>
<li>Detección de plugins cerrados o abandonados.</li>
<li>Análisis semanal de seguridad con aviso solo si la puntuación baja.</li>
<li>Monitorización de disponibilidad con aviso al móvil.</li>
</ul>
<p><strong>Notas de rescate:</strong></p>
<ul>
<li>Acceso al panel del hosting.</li>
<li>Donde están las copias y los pasos para restaurarlas.</li>
<li>Canal de soporte del hosting.</li>
<li>A quién llamar si necesitas ayuda.</li>
</ul>
<h2>Y ahora sí, cierra la puerta con dos vueltas</h2>
<p>Si me preguntas como profesional que mantiene decenas de webs de clientes, mi posición es clara, mía, pero te la cuento. <strong>El piloto automático no es un apaño para vacaciones, es como debería estar montada la seguridad de cualquier web todo el año</strong>, porque eso de «yo lo reviso a mano cada día» dura dos semanas, como los propósitos de enero, y lo que queda después es una web que no revisa nadie.</p>
<p>¿Que ni siquiera quieres montarlo? Vale, es una decisión respetable, que para eso está la opción de delegarlo todo, y ahí te espero en mi <a href="https://mantenimiento.ayudawp.com/">servicio de mantenimiento WordPress</a>.</p>
<p>¿Que gestionas webs de clientes y esta guía se te queda corta? Tengo publicada una <a href="https://ayudawp.com/seguridad-wordpress-empresas-agencias/">guía de seguridad WordPress para empresas y agencias</a> que sigue justo donde esta lo deja, y sino <a href="https://ayudawp.com/categoria/seguridad/"><strong>tienes toda una lista enorme de tutoriales de seguridad para WordPress</strong></a>.</p>
<p>Para dudas, matices o contarme tu propia lista de cerrar la casa, me tienes ahí abajo (que mis vacaciones son siempre teóricas), en la sección de comentarios.</p>
<p>Buen viaje, que la web queda en buenas manos. Las <del>tuyas</del> suyas.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/seguridad-wordpress-piloto-automatico/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Directiva Ómnibus en tiendas WordPress con WooCommerce</title>
		<link>https://ayudawp.com/directiva-omnibus-woocommerce/</link>
					<comments>https://ayudawp.com/directiva-omnibus-woocommerce/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Wed, 29 Jul 2026 06:28:56 +0000</pubDate>
				<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Ómnibus]]></category>
		<category><![CDATA[Principiante]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159921</guid>

					<description><![CDATA[Si tu tienda creada con WordPress y WooCommerce se limita a tachar el precio normal y mostrar el de oferta al lado, es muy probable que no estés cumpliendo la directiva Ómnibus de precios.]]></description>
										<content:encoded><![CDATA[<p>Si tu tienda creada con WordPress y WooCommerce se limita a tachar el precio normal y mostrar el de oferta al lado, <strong>es muy probable que no estés cumpliendo la directiva Ómnibus de precios</strong>.</p>
<p>Esta ley no pide enseñar el precio habitual, pide enseñar <strong>el precio más bajo que ese producto haya tenido en los últimos 30 días</strong>, y esa diferencia lleva aplicándose desde hace tiempo sin que casi nadie repare en ella.</p>
<p>No es una norma nueva ni un borrador pendiente, está muy vigente, así que vamos a ver exactamente qué exige, qué te juegas si no la cumples y cómo resolverlo sin volverte loco con el catálogo.</p>
<h2>Lo que exige la directiva Ómnibus en cada rebaja de precios</h2>
<p>La norma viene de la Directiva (UE) 2019/2161, conocida como <strong>directiva Ómnibus</strong>, que añadió el artículo 6 bis a la <a href="https://www.boe.es/buscar/act.php?id=BOE-A-1996-1072" target="_blank" rel="nofollow noopener">Directiva 98/6/CE de indicación de precios</a>.</p>
<p>España la transpuso a través del artículo 20.1 de la Ley de Ordenación del Comercio Minorista, redactado por el Real Decreto-ley 24/2021, <strong>en vigor desde el 28 de mayo de 2022</strong>.</p>
<p>La regla en sí se explica en una frase y se cumple mal en la mayoría de tiendas:</p>
<blockquote><p>Toda reducción de precio debe mostrar, junto al precio rebajado, el precio anterior.</p></blockquote>
<p>Y ojo, porque «precio anterior» no es lo que la mayoría cree. <strong>No es el precio habitual del producto, es el precio más bajo que haya tenido en los 30 días previos a la rebaja</strong>, sea cual sea el motivo por el que estuvo a ese precio.</p>
<p>Aquí tienes los requisitos por la vía rápida, para que no digas que me hago esperar:</p>
<table>
<thead>
<tr>
<th>Requisito</th>
<th>Qué exige la norma</th>
</tr>
</thead>
<tbody>
<tr>
<td>Precio anterior visible</td>
<td>Mostrar el precio más bajo de los 30 días previos junto al precio rebajado</td>
</tr>
<tr>
<td>Cálculo del precio anterior</td>
<td>El más bajo aplicado en los 30 días precedentes, sea cual sea el motivo de ese precio</td>
</tr>
<tr>
<td>Productos nuevos</td>
<td>Exentos solo si es la primera vez que se ponen a la venta, no por llevar menos de 30 días</td>
</tr>
<tr>
<td>Perecederos próximos a caducar</td>
<td>Los precios de liquidación por desperdicio alimentario no cuentan en el cálculo de los 30 días</td>
</tr>
<tr>
<td>Descuento mínimo o máximo</td>
<td>No se puede condicionar una promoción a un porcentaje de reducción fijo</td>
</tr>
</tbody>
</table>
<h3>A qué te arriesgas si no cumples la directiva Ómnibus</h3>
<p>Esto no es una recomendación de buenas prácticas, es una infracción tipificada, un delito, <strong>no es broma y las multas son tremendas</strong>.</p>
<p>El artículo 49 del texto refundido de la Ley General para la Defensa de los Consumidores y Usuarios clasifica las <strong>sanciones en tres niveles</strong>.</p>
<ul>
<li>Leves, que van de 150 a 10.000 €.</li>
<li>Graves de 10.001 a 100.000 € (con posibilidad de superar esa cifra hasta 4 o 6 veces el beneficio ilícito obtenido).</li>
<li>Muy graves llegan de 100.001 € hasta 1.000.000 €.</li>
</ul>
<p>Y no es solo sobre el papel, ni de lejos, ya se han estrenado y con honores, el Ministerio de Derechos Sociales, Consumo y Agenda 2030 <a href="https://www.dsca.gob.es/es/comunicacion/notas-prensa/justicia-respalda-sanciones-consumo-falsas-rebajas-durante-black-friday" target="_blank" rel="nofollow noopener">sancionó a siete empresas</a> por <strong>subir el precio de varios productos justo antes del Black Friday para bajarlo después a su valor original y presentarlo como oferta</strong>.</p>
<p>El conjunto de las multas rondó los 350.000 € y una de las empresas recurrentes tuvo que depositar un aval de 110.000 € mientras se resuelve su recurso. Imagino que no te sobra el dinero ¿verdad?</p>
<p>Para detectarlo, la Dirección General de Consumo usó la <strong>Price Reduction Tool</strong>, una herramienta de la propia Comisión Europea que <strong>monitoriza precios en tiempo real durante campañas</strong> como esta.</p>
<p>Por si te lo estás planteando, la propia Comisión Europea ya avisó de que <strong>subir el precio antes de bajarlo no cuela</strong>, ni presentándolo como «precio futuro».</p>
<blockquote><p>El precio anterior sigue siendo el más bajo real de los últimos 30 días, ponga lo que ponga en el cartel de la oferta.</p></blockquote>
<p>Y ya que estamos una aclaración rápida, porque el nombre podría llevar a confusión, y es que <strong>esto no tiene nada que ver con el Digital Omnibus</strong> del que tanto se oye hablar últimamente, ese paquete que tiene que ver con el RGPD y las cookies. Ese <em>otro Omnibus</em> sigue paseándose por Bruselas, aún sin texto definitivo. La directiva Ómnibus de precios de la que te hablo aquí lleva aplicándose desde hace tiempo y no tiene nada pendiente de aprobar, está de un vigente que asusta.</p>
<h2>Por qué el precio tachado de WooCommerce no te libra de nada</h2>
<p>Siento decirlo, pero no, <strong>eso de los precios tachados no sirve de nada</strong>, ni de lejos, te lo explico.</p>
<p>Como sabes, <strong>WooCommerce tacha el precio habitual del producto y muestra al lado el precio de oferta</strong>, así que parece que ya cumples, per va a ser que no.</p>
<p>La realidad es que el precio habitual solo coincide con el precio anterior legal si no has tocado ese precio ni hecho ninguna promoción en los últimos 30 días. <strong>Si encadenas rebajas, el tachado de WooCommerce deja de servir como prueba de nada</strong>.</p>
<p>Es exactamente el truco que le costó el expediente a esas siete empresas del punto anterior, subir el precio unos días antes para que el descuento posterior parezca mayor de lo que es en realidad.</p>
<p>WooCommerce te deja hacerlo sin ningún aviso, porque el plugin no sabe nada de la directiva Ómnibus, solo compara el precio habitual con el de oferta rebajado que tú le pongas.</p>
<h2>Plugins que ayudan con a cumplir la directiva Ómnibus de precios</h2>
<p>Aquí no hace falta reinventar nada, hay opciones ya disponibles, solo te queda elegir con cabeza:</p>
<ul>
<li><a href="https://wordpress.org/plugins/omnibus/" target="_blank" rel="nofollow noopener"><strong>Omnibus — show the lowest price</strong></a>, de iWorks (gratuito): Con más de 10.000 instalaciones activas, aunque sin cambios funcionales desde marzo de 2024 (la actualización de 2025 solo tocó el módulo de valoraciones), probado hasta WordPress 6.8.5 y sin traducción al español. Ojo con esto, pues varias reseñas señalan que en el primer descuento de un producto sin histórico previo, el plugin muestra el propio precio rebajado como si fuera el anterior, justo el fallo que no te puedes permitir, pruébalo antes de dejarlo activo pensando que cumple.</li>
<li><a href="https://wpdesk.net/products/wp-desk-omnibus/" target="_blank" rel="nofollow noopener"><strong>WP Desk Omnibus for WooCommerce</strong></a> (de pago): Actualizado el 28 de mayo de 2026, con interpretación configurable según el país y soporte activo, buena opción si prefieres pagar por tranquilidad.</li>
<li><a href="https://wordpress.org/plugins/fleekcode-omnibus/" target="_blank" rel="nofollow noopener"><strong>FleekCode Omnibus Price Tracker</strong></a> (gratuito): Con tabla propia en base de datos en lugar de <code>postmeta</code> y base de instalación todavía pequeña. Pruébalo antes de pagar por el anterior, igual sin necesidad.</li>
</ul>
<p>Con cualquiera de los tres cumples suficientemente, salvo que se confirme lo de WP Desk, en cuyo caso habría que descartar ese. Revísalos en una tienda de pruebas que tenga de todo antes de instalar nada definitivamente, porque el panorama de plugins cambia con el tiempo y lo que te cuento aquí tiene fecha de caducidad.</p>
<h2>Un apaño con código si tu caso es de los sencillos</h2>
<p>Si vendes <strong>solamente productos simples</strong>, nada de variables, y no te apetece meter un plugin enorme más para esto, aquí tienes un código que hace lo imprescindible.</p>
<p>Además, para que no creas que es una birria, tiene una salvaguarda que muchos plugins comerciales no tienen, y es que nunca inventa un precio anterior, si no hay 30 días reales de histórico no muestra nada:</p>
<pre>&lt;?php

/***
 * Plugin Name: Registro de precios mínimos según la Directiva Ómnibus de la UE
 * Plugin URI: https://servicios.ayudawp.com/
 * Description: Muestra un precio anterior solo si hay un historial real de al menos 30 días. Nunca inventa ni calcula un precio anterior. Solo para productos simples.
 * Version: 1.0
 * Author: Fernando Tellado
 * Author URI: https://ayudawp.com/
 * License: GPL2
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: registro-precios-omnibus
 * Domain Path: /languages
*/

/**
 * Registro de precios mínimos previsto en la Directiva Ómnibus de la UE (Directiva (UE) 2019/2161)
 * Solo muestra un precio anterior cuando hay un historial real registrado de al menos 30 días
 * Nunca inventa ni calcula un precio anterior. Solo para productos simples
 */

// Registra el precio cada vez que se guarde un producto, solo si ha cambiado
add_action( 'woocommerce_update_product', 'ayudawp_omnibus_log_price', 20, 2 );
function ayudawp_omnibus_log_price( $product_id, $product ) {

if ( ! $product || ! $product-&gt;is_type( 'simple' ) ) {
return; // Variable products need a dedicated plugin, not this snippet.
}

$current_price = $product-&gt;get_regular_price();

if ( '' === $current_price ) {
return;
}

$log        = get_post_meta( $product_id, '_ayudawp_omnibus_price_log', true );
$log        = is_array( $log ) ? $log : array();
$last_entry = end( $log );

if ( ! $last_entry || (float) $last_entry['price'] !== (float) $current_price ) {
$log[] = array(
'price' =&gt; (float) $current_price,
'date'  =&gt; current_time( 'timestamp' ),
);
}

// Eliminar las entradas con más de 45 días de antigüedad (el plazo legal de 30 días más un margen de seguridad)
$cutoff = current_time( 'timestamp' ) - ( 45 * DAY_IN_SECONDS );
$log    = array_values( array_filter( $log, function( $entry ) use ( $cutoff ) {
return $entry['date'] &gt;= $cutoff;
} ) );

update_post_meta( $product_id, '_ayudawp_omnibus_price_log', $log );
}

// Mostrar únicamente el precio anterior con un historial acumulado de al menos 30 días reales
add_action( 'woocommerce_single_product_summary', 'ayudawp_omnibus_display_prior_price', 11 );
function ayudawp_omnibus_display_prior_price() {

global $product;

if ( ! $product || ! $product-&gt;is_type( 'simple' ) || ! $product-&gt;is_on_sale() ) {
return;
}

$log = get_post_meta( $product-&gt;get_id(), '_ayudawp_omnibus_price_log', true );
$log = is_array( $log ) ? $log : array();

if ( empty( $log ) ) {
return; // No history yet: show nothing rather than guessing.
}

$days_of_history = ( current_time( 'timestamp' ) - $log[0]['date'] ) / DAY_IN_SECONDS;

if ( $days_of_history &lt; 30 ) {
return; // Core safeguard: never show a prior price without a real 30-day track record.
}

$window_start = current_time( 'timestamp' ) - ( 30 * DAY_IN_SECONDS );
$in_window    = array_filter( $log, function( $entry ) use ( $window_start ) {
return $entry['date'] &gt;= $window_start;
} );

if ( empty( $in_window ) ) {
return;
}

$lowest_price = min( wp_list_pluck( $in_window, 'price' ) );

if ( $lowest_price &lt;= (float) $product-&gt;get_sale_price() ) {
return; // Nunca muestra un precio anterior que no sea realmente inferior al precio rebajado
}

echo '&lt;p class="ayudawp-omnibus-prior-price"&gt;' .
esc_html__( 'Precio anterior: ', 'ayudawp' ) .
wp_kses_post( wc_price( $lowest_price ) ) .
'&lt;/p&gt;';
}</pre>
<p>Este código registra el precio cada vez que guardas el producto, solo si ha cambiado, y purga las entradas de más de 45 días (30 de la ley más un margen de seguridad). En la parte visible de la web solo pinta el precio anterior cuando ya hay al menos 30 días reales de histórico acumulado, nunca antes.</p>
<p>Y para que no te lleves un susto, solo funciona con productos simples, no cuenta los cambios hechos por edición rápida, importación masiva o la API REST, y no sustituye a un plugin dedicado si tu catálogo es grande o vendes productos variables.</p>
<blockquote><p>El código te lo dejo preparado como plugin, por si quieres subirlo como plugin o a <code>mu-plugins</code>, lo que prefieras. Si eres más de añadirlo como código quítale toda la cabecera que lo identifica como plugin, eso te sobra, y el <code>&lt;?php</code> inicial, o no funcionará.</p></blockquote>
<p>Si quieres más para eso están las opciones del punto anterior de los plugins.</p>
<h2>Rebajas encadenadas, el caso donde más se la juegan las tiendas</h2>
<p>Este es el escenario que más dudas genera, y por suerte la propia Comisión Europea lo aclaró bastante detallado en una <a href="https://eur-lex.europa.eu/legal-content/ES/TXT/HTML/?uri=CELEX:52021XC1229(06)" target="_blank" rel="nofollow noopener">comunicación</a> publicada en el Diario Oficial de la UE en diciembre de 2021.</p>
<p>Hay dos situaciones muy distintas, y conviene no confundirlas:</p>
<ul>
<li><strong>Campañas separadas con el precio subiendo entre medias</strong> (Black Friday, luego Navidad, luego rebajas de enero): Se aplica la norma general sin excepciones. El precio anterior de cada nueva rebaja tiene que ser el más bajo de, como mínimo, los últimos 30 días, y eso incluye el precio de la promoción anterior. Si bajaste un producto a 80 € en el Black Friday, dos semanas después no puedes anunciarlo «rebajado» tomando como referencia los 100 € de precio normal: tu referencia sigue siendo 80 €.</li>
<li><strong style="font-size: 16px;">Reducción progresiva dentro de una misma campaña, sin interrupción y sin que el precio suba en ningún momento</strong><span style="font-size: 16px;">: Aquí sí se puede mantener el precio previo a toda la campaña como referencia constante en cada escalón. Es la excepción que prevé el propio artículo 6 bis, aunque no he encontrado que España la haya transpuesto de forma explícita, así que el mensaje práctico y seguro es aplicar siempre la regla general de los 30 días, sin dar el atajo por hecho.</span></li>
</ul>
<p>Si programas varias campañas con esa joya de plugin llamado <a href="https://es.wordpress.org/plugins/multiple-sale-prices-scheduler/" target="_blank" rel="nofollow noopener">Multiple Sale Prices Scheduler</a>, ten en cuenta que <strong>el plugin programa los cambios de precio, no calcula el precio anterior legal por ti</strong>. Combínalo con alguna de las opciones de este artículo si vas a encadenar promociones.</p>
<h2>Lo demás que trae la directiva Ómnibus y no tiene que ver con precios</h2>
<p>El artículo 6 bis es la pieza que más te afecta si vendes con descuentos, pero <strong>la directiva Ómnibus trae más obligaciones que quizá también te toca cumplir</strong>.</p>
<p>Me refiero a cosas como <strong>verificar que las reseñas de tus productos vienen de compradores reales</strong>, dar una <strong>información mínima al consumidor antes de la compra</strong>, identificar con claridad la <strong>publicidad de influencers</strong>, y reconocer que <strong>los servicios «gratuitos» pagados con datos personales también generan derechos</strong> para el consumidor.</p>
<p>Cada una de estas otras cuestiones a tener en cuenta da para su propio artículo, así que aquí me quedo solo con el aviso, para que tengas en cuenta que esto es mucho más que solo precios.</p>
<h2>Listado rápido para cumplir la directiva Ómnibus de precios</h2>
<p>Si vendes con descuentos en WooCommerce, sí, y aquí te dejo el resumen para revisar tu tienda de un vistazo:</p>
<table>
<thead>
<tr>
<th>Requisito</th>
<th>Qué exige la norma</th>
<th>Cómo lo cubres</th>
</tr>
</thead>
<tbody>
<tr>
<td>Precio anterior visible</td>
<td>Precio más bajo de los 30 días previos junto al rebajado</td>
<td>Plugin específico, o el código de este artículo en productos simples</td>
</tr>
<tr>
<td>Cálculo en campañas sucesivas</td>
<td>Incluye siempre la rebaja anterior si cayó en los últimos 30 días</td>
<td>Plugin específico con histórico real, el snippet de este artículo no cubre esto</td>
</tr>
<tr>
<td>Productos nuevos</td>
<td>Exentos solo por ser primera venta, nunca por antigüedad</td>
<td>Revisa que el plugin que elijas distinga bien este caso</td>
</tr>
<tr>
<td>Perecederos con desperdicio alimentario</td>
<td>Esos precios no cuentan en el cálculo de los 30 días</td>
<td>Revisa la configuración si vendes este tipo de producto</td>
</tr>
<tr>
<td>Descuento mínimo o máximo</td>
<td>No se puede condicionar una promoción a un porcentaje fijo</td>
<td>Revisión manual de tus propias campañas</td>
</tr>
<tr>
<td>Reseñas, información previa, publicidad de influencers</td>
<td>Resto de obligaciones de la directiva Ómnibus</td>
<td><em>Pendiente de artículo específico</em></td>
</tr>
</tbody>
</table>
<p>Nada más por ahora, dale una vuelta a tu catálogo antes de la próxima campaña que actives, sea cual sea. Si te ha quedado alguna duda sobre tu caso concreto, ya sabes dónde encontrarme, en los comentarios aquí abajo.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/directiva-omnibus-woocommerce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Tu currículum de WordPress ya está escrito</title>
		<link>https://ayudawp.com/curriculum-wordpress/</link>
					<comments>https://ayudawp.com/curriculum-wordpress/#comments</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Tue, 28 Jul 2026 06:28:36 +0000</pubDate>
				<category><![CDATA[Plugins WordPress]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Comunidad]]></category>
		<category><![CDATA[EEAT]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159996</guid>

					<description><![CDATA[A todos los que contribuís de alguna forma a WordPress os hago un regalo. Se llama Contributor Résumé, un plugin gratuito que muestra todas tus colaboraciones en un currículum, siempre actualizado, que puedes publicar en tu propia web]]></description>
										<content:encoded><![CDATA[<p>Escribo en Ayuda WordPress desde diciembre de 2007, tengo <a href="https://profiles.wordpress.org/fernandot/" target="_blank" rel="noopener">perfil de colaborador en WordPress.org</a> desde noviembre de 2008 y desde entonces he sido GTE de la traducción al español, parte del equipo de soporte en los foros, administrador de la web en español de WordPress.org y ponente en más WordCamps de las que me caben en la cabeza.</p>
<p>Todo eso se puede comprobar, sí, pero queda repartido en media docena de sitios que casi nadie visita (tu perfil de wordpress.org, translate.wordpress.org, los foros de soporte, la API de reconocimientos del núcleo, el directorio de fotos), y cada uno cuenta solo un trocito de tu historia, nunca la historia entera.</p>
<p>Así que <strong>me he hecho un regalo, y de paso os lo hago a todos los que contribuís de alguna forma a este proyecto</strong> llamado WordPress. Se llama <strong><a href="https://es.wordpress.org/plugins/contributor-resume/">Contributor Résumé</a></strong>, un plugin gratuito que coge todo ese trabajo disperso y lo convierte en un currículum bonito, siempre actualizado, que puedes publicar en tu propia web con un solo bloque.</p>
<p>Vamos a ver qué tiene dentro, cómo lo pones en marcha y por qué para mí <strong>esto no es un plugin más</strong>.</p>
<h2>Un currículum de verdad para quien nos regala su tiempo y conocimiento</h2>
<p>La idea es tan sencilla que casi da vergüenza no haberla hecho antes, pues escribes tu nombre de usuario de WordPress.org, compruebas lo que ha encontrado el plugin y publicas tu página. <strong>Nada de IDs numéricos, nada de tokens, nada de código.</strong> Esto vale igual si traduces, si respondes en el foro, si organizas meetups o si simplemente haces fotos para el directorio, no solo si publicas plugins.</p>
<p>Un único bloque, o el shortcode <code>[contributor_resume]</code> si trabajas con un tema clásico, agrupa decenas de secciones distintas, todas opcionales. Estas son algunas de las que más se van a usar:</p>
<ul>
<li><strong>Perfil destacado:</strong> tu avatar, tus distinciones reales de wordpress.org y los enlaces a tu web, GitHub y Slack.</li>
<li><strong>Impacto reciente:</strong> tus contribuciones de los últimos 30, 90 y 365 días, con puntuación incluida.</li>
<li><strong>Eventos:</strong> las WordCamps y meetups en las que hablas, organizas o asistes.</li>
<li><strong>Traducciones:</strong> tus idiomas, tus permisos y el número de proyectos en cada uno.</li>
<li><strong>Soporte:</strong> los hilos que has abierto y las respuestas que has dado en los foros.</li>
<li><strong>Reconocimientos del núcleo:</strong> las versiones de WordPress en cuyos créditos aparece tu nombre.</li>
<li><strong>Plugins y temas:</strong> los que has publicado, con sus estadísticas, y los que tienes marcados como favoritos.</li>
<li><strong>GitHub:</strong> tu perfil y tus repositorios con más estrellas, sin necesitar ningún token para verlo.</li>
</ul>
<p>Y quedan más, porque también incluye <strong>fotos del directorio</strong> de WordPress con su propia caja de luz, tu <strong>compromiso de horas</strong> semanales, la <strong>biografía</strong> con tu historia de origen, los <strong>equipos</strong> e <strong>idiomas</strong> de tu comunidad de contribución, y alguna sección más. Decenas de proyectos, cada uno reordenable arrastrando y soltando, y activable o no según lo que quieras enseñar. No está mal ¿no?</p>
<p>Además, que es <a href="https://ayudawp.com/por-que-no-hay-certificaciones-oficiales-de-wordpress/" target="_blank" rel="noopener">el único currículum de WordPress real que hay</a>.</p>
<h2>¡Es taaan mooonoooo!</h2>
<p><a href="https://ayudawp.com/?attachment_id=160032" rel="nofollow"><img fetchpriority="high" decoding="async" class="sombra alignnone wp-image-160032 size-medium" src="https://ayudawp.com/wp-content/uploads/2026/07/contributor-resume-ajustes-1200x730.jpg" alt="" width="1200" height="730" srcset="https://ayudawp.com/wp-content/uploads/2026/07/contributor-resume-ajustes-1200x730.jpg 1200w, https://ayudawp.com/wp-content/uploads/2026/07/contributor-resume-ajustes-768x467.jpg 768w, https://ayudawp.com/wp-content/uploads/2026/07/contributor-resume-ajustes-1536x934.jpg 1536w, https://ayudawp.com/wp-content/uploads/2026/07/contributor-resume-ajustes.jpg 1920w" sizes="(max-width: 1200px) 100vw, 1200px"></a></p>
<p>Si es que encima es bonito y para (casi) todos los gustos. Tienes <strong>tres estilos</strong>, uno moderno, uno clásico con aspecto de currículum impreso de toda la vida y uno monoespaciado que parece sacado de una terminal, para quien quiera presumir de friki con estilo.</p>
<p>A eso le sumas <strong>claro, oscuro o automático</strong> según lo que prefiera quien visita tu web, color de realce propio o heredado del tema, radio de esquinas, sombra, columnas de la cuadrícula y un diseño compacto si prefieres ir al grano. Las estadísticas se animan con un contador que sube según entran en pantalla, y se paran en seco si el visitante tiene activada la reducción de movimiento.</p>
<p>Puedes arrastrar las secciones para reordenarlas, elegir cuántos elementos muestra cada cuadrícula, y probarlo todo con una vista previa en directo, en escritorio y en móvil, sin salir de los ajustes. Y si con eso no tienes bastante, cada plantilla se puede copiar a tu tema y editarla a mano, con variables CSS documentadas bajo el prefijo <code>--cvr-</code>.</p>
<h2>Solo tus datos, y ni uno de quien te visita</h2>
<p>El plugin lee <strong>tus datos públicos de contribución en las URLs oficiales de WordPress.org</strong> (y, si añades tu usuario, también en la API pública de GitHub), y nunca recoge ni envía nada de quien entra en tu página. Las páginas públicas no hacen ninguna petición externa, y los avatares y las fotos los carga el navegador de tu visitante directamente desde WordPress.org, Gravatar o GitHub, igual que hace WordPress toda la vida con los avatares de los comentarios.</p>
<p>El único dato que sale de tu servidor es tu nombre de usuario, y solo cuando generas o actualizas el currículum en segundo plano. Si añades un token de acceso de GitHub (opcional, solo para subir el límite de peticiones a su API), se queda guardado en tu web y no se muestra jamás en la parte pública.</p>
<h2>Cómo lo pones en marcha en un par de minutos</h2>
<ol>
<li>Instala y activa el plugin.</li>
<li>Abre «Contributor Résumé» desde el menú de tu cuenta en la barra de admin superior, o desde el enlace de ajustes que aparece junto al plugin en la pantalla de plugins.</li>
<li>Escribe tu nombre de usuario de WordPress.org (y, si quieres, el de GitHub) y pulsa «Comprobar y crear mi currículum».</li>
<li>Pulsa «Crea mi página de currículum», o añade el bloque (o el shortcode <code>[contributor_resume]</code>) a cualquier página que ya tengas.</li>
</ol>
<p><img decoding="async" class="alignnone size-full wp-image-160011" src="https://ayudawp.com/wp-content/uploads/2026/07/Activar-Contributor-Resume.jpg" alt="" width="1200" height="1184"></p>
<p>Funciona igual de bien con el editor de bloques que con un tema clásico, y si administras varias instalaciones o trabajas con entornos de prueba, <code>wp cresume refresh</code>, <code>wp cresume status</code> y <code>wp cresume clear-cache</code> te dejan gestionar la caché entera desde WP-CLI.</p>
<h2>¿Quieres verlo ya?</h2>
<p>Tengo mi propio currículum publicado en <a href="https://ayudawp.com/fernando-tellado-wordpress-org/">esta misma web</a>, con casi todas las secciones activadas, así que puedes verlo en marcha antes de instalar nada. Ahí aparecen mis 24 plugins publicados, mis traducciones a 23 idiomas repartidas en 3.416 proyectos, mis 134 hilos abiertos y 856 respuestas en los foros de soporte, y las WordCamps en las que he hablado solo en lo que llevamos de 2026.</p>
<p>Lo mejor es ver cómo suben solos los contadores de «Impacto reciente» mientras cargas la página, en vez de una foto de perfil de 2015 congelada para siempre. Los datos se actualizan sin que yo tenga que tocar nada.</p>
<p>Si lo prefieres, en la página del plugin <a href="https://es.wordpress.org/plugins/contributor-resume/?preview=1" target="_blank" rel="nofollow noopener">puedes lanzar una vista previa en directo</a> y WordPress.org te monta una web con el plugin activo para que pruebes con tu propio perfil.</p>
<h2>Por qué esto no es un plugin más, es un regalo</h2>
<p>Todos mis plugins resuelven un problema técnico, ya sea de seguridad, de rendimiento, de SEO o de cumplimiento normativo. Este no, este es diferente, este está dedicado a ti, que contribuyes a que todos podamos disfrutar de WordPress.</p>
<p>Es un plugin para quien traduce cadenas a las tres de la mañana, para quien modera un hilo de soporte enrevesado, quien organiza una WordCamp sin cobrar un euro, o quien hace fotos para el directorio de WordPress, porque todas esas personas, casi siempre anónimas, se merecen algo más que una insignia enterrada en un perfil que casi nadie mira. E</p>
<p>s gratis, sin letra pequeña ni versión de pago escondida detrás de las funciones buenas, porque la comunidad que me ha dado casi 20 años de carrera no me debe nada a mí, se lo debo yo a ella. Ya escribí en su día sobre <a href="https://ayudawp.com/tag/gpl/" target="_blank" rel="noopener">por qué es importante tanto el software libre</a>, así que no me voy a repetir aquí.</p>
<p>Si contribuyes de cualquier forma (código, traducciones, soporte, fotos, eventos, lo que sea), instálalo en tu web, crea tu página, y enséñale al mundo lo que llevas currado todo este tiempo. Y si todavía no contribuyes a nada, esto también vale como <strong>excusa estupenda para empezar a contribuir a WordPress</strong>, porque ya sabes dónde vas a poder enseñarlo después.</p>
<p>Puedes incluso <a href="https://translate.wordpress.org/projects/wp-plugins/contributor-resume">traducirlo tú mismo</a> a tu idioma, porque de momento solo está en español e inglés (dentro de nada en italiano), y a un plugin que celebra a quien traduce le vendría de perlas que también lo traduzcan.</p>
<p>Como dice el pie de página de wordpress.org, «<code><strong>el código es poesía</strong></code>». Pues ahora, además, tienes dónde publicar el tuyo. Si te lo instalas, cuéntame en los comentarios cómo te ha quedado o qué sección echas en falta.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/curriculum-wordpress/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>¿Qué tipos de Schema elijo entre todo esto?: Article, BlogPosting, NewsArticle, TechArticle, FAQ, WebPage…</title>
		<link>https://ayudawp.com/schemas-article-webpage/</link>
					<comments>https://ayudawp.com/schemas-article-webpage/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Mon, 27 Jul 2026 06:28:09 +0000</pubDate>
				<category><![CDATA[SEO / AEO / GEO / AIO]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[JSON-LD]]></category>
		<category><![CDATA[schema.org]]></category>
		<category><![CDATA[Visibility]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159980</guid>

					<description><![CDATA[¿Te lías con los distintos tipos de Schema que puedes elegir para tus publicaciones? Te lo explico facilito…]]></description>
										<content:encoded><![CDATA[<p>Desde que <a href="https://es.wordpress.org/plugins/native-aeo-pack/" target="_blank" rel="noopener">Visibility</a> estrenó el <strong>selector de tipo de schema</strong> me llega la misma pregunta por todas partes, en los comentarios, en el foro de soporte y hasta por correo. <strong>¿Qué elijo aquí?</strong></p>
<p>Te lo adelanto ya, pero en plan básico: para una entrada normal de blog, <code>BlogPosting</code> o el valor por defecto, para una página corriente, <code>WebPage</code>, y entre los subtipos de la familia <code>Article</code> la elección apenas cambia nada en los resultados de Google, aunque sí en cómo te leen los asistentes de IA.</p>
<p>Sí, para empezar vale, como resumen cojonudo, pero si quieres hacerlo bien no te puedes quedar ahí, que la cosa tiene su miga, y lo mejor de todo es que de paso te va a servir aunque uses Yoast, Rank Math, el mismo Visibilty o cualquier otro plugin SEO, porque la etiqueta final es la misma.</p>
<p>Vamos a verlo de a pasito que dirían en mi pueblo.</p>
<h2>Qué es eso del «tipo de schema»</h2>
<p>Cualquier plugin de SEO, Visibility, Yoast, Rank Math el que sea, añade al código de cada página que publicas un bloque de <strong>JSON-LD, que son datos estructurados</strong> en formato JSON, invisibles para el visitante pero que las máquinas leen sin problema.</p>
<p>Dentro de ese bloque JSON-LD hay <strong>una propiedad llamada <code>@type</code> que dice qué es esa página</strong>, si un artículo, una noticia, una página de contacto o un perfil.</p>
<p><strong>El tipo de schema es la etiqueta</strong> de una caja de mudanza, donde todas las cajas son iguales por fuera, y lo que cambia cómo las tratan los transportistas es que ponga libros o vajilla. Si marcas como vajilla una caja llena de libros no pasa nada grave, pero el que la abra esperando platos dejará de fiarse de tus etiquetas.</p>
<p>Con Google pasa lo mismo,<strong> una etiqueta que no se corresponde con el contenido no te penaliza de entrada, pero deja de servir para algo</strong>, y si encima es engañosa a propósito hay una <a href="https://support.google.com/webmasters/answer/9044175" target="_blank" rel="noopener nofollow">acción manual</a> esperándote en Search Console con el nombre de «marcado estructurado con spam».</p>
<h2>Dónde se elige el tipo de Schema en tu plugin SEO</h2>
<p>Cada plugin tiene sus manías, por ejemplo, en Visibility te deja <strong>fijarlo en dos niveles</strong>, por un lado, en los ajustes del módulo de descubrimiento <strong>eliges el tipo por defecto para cada tipo de contenido, uno para las entradas, otro para las páginas y así con cada tipo personalizado</strong> que tengas.</p>
<p>Luego, en la barra lateral del editor, entrada por entrada, puedes <strong>sustituir ese valor cuando una publicación concreta consideres que requiera otro Schema</strong>. Esto también lo tienen otros plugins, como Rank Math o Yoast.</p>
<p>La opción «Por defecto (<code>Article</code>)» del desplegable de Visibility y otros plugins significa justo eso, que se aplique lo que hayas configurado para ese tipo de contenido, así que <strong>si no tienes un motivo concreto para cambiarlo, déjalo en «Por defecto» y a otra cosa</strong>.</p>
<p><!-- CAPTURA: selector de tipo de schema en la barra lateral del editor, con el desplegable abierto --></p>
<p>Si vienes de otro plugin SEO la lógica es muy parecida, Yoast lo llama «Page type» y «Article type» en su pestaña de schema, Rank Math lo llama «Schema Type» y SEOPress tiene su equivalente en los datos estructurados.</p>
<p>Todo lo que cuento en este artículo te <strong>sirve igual con cualquier plugin de SEO</strong>. Si te pasas a Visibility el importador de un clic se trae también estos valores desde Yoast, Rank Math y All in One SEO, junto con el resto de tus metadatos, al contrario no te prometo lo mismo.</p>
<h2>La familia <code>Article</code>: seis etiquetas para casi lo mismo</h2>
<p>El primer grupo del selector lo forman los <strong>subtipos de artículo, pensados para contenido editorial con autor y fecha</strong>:</p>
<ul>
<li><code>Article</code>: el genérico, válido para cualquier contenido editorial y la elección segura cuando dudas.</li>
<li><code>BlogPosting</code>: la entrada de blog clásica, con voz y firma. Si tu web es un blog es tu etiqueta natural.</li>
<li><code>NewsArticle</code>: noticias y actualidad, contenido pegado a un hecho con fecha. Si cubres la actualidad de tu sector, este.</li>
<li><code>TechArticle</code>: tutoriales, guías paso a paso y documentación técnica. En un blog de tutoriales como este es el que más sentido tiene.</li>
<li><code>ScholarlyArticle</code>: estudios y trabajos con metodología, más propio de webs académicas o de investigación.</li>
<li><code>Report</code>: informes y análisis con datos, tipo estudio anual o comparativa documentada.</li>
</ul>
<p>Pues bien, <strong><a href="https://developers.google.com/search/docs/appearance/structured-data/article" target="_blank" rel="noopener nofollow">la documentación de Google</a> solo contempla tres de ellos</strong> para su función de artículo, <code>Article</code>, <code>NewsArticle</code> y <code>BlogPosting</code>, y los trata como intercambiables. Los otros tres son subtipos válidos de schema.org que Google ni siquiera menciona.</p>
<p>O sea, que <strong>elegir entre <code>BlogPosting</code> y <code>NewsArticle</code> no va a cambiar cómo te muestra Google, y elegir <code>TechArticle</code> no te da nada extra en sus resultados</strong>.</p>
<p>¿Entonces para qué molestarse?, pues porque <strong>Google no es el único que lee esa etiqueta, los asistentes de IA y los motores de respuesta leen el <code>@type</code></strong> tal cual, sin interpretarlo, igual que cualquier agente que rastree tu web.</p>
<p>Para un asistente de IA <strong>un <code>TechArticle</code> le dice que lo que tiene delante es un tutorial técnico</strong>, y que lo entregue cuando alguien pregunte cómo hacer algo, y <strong>de un <code>NewsArticle</code>  le dice que es una noticia, y que tenga muy en cuenta la fecha</strong>.</p>
<p>Ser preciso te cuesta un clic y aporta contexto a todo lo que no es Google.</p>
<blockquote><p>Para Google, BlogPosting y NewsArticle son la misma etiqueta con distinto nombre, pero para un asistente de IA son dos cosas distintas.</p></blockquote>
<p>Eso sí, sin venirte arriba, que <a href="https://developers.google.com/search/docs/appearance/ai-features" target="_blank" rel="noopener nofollow">Google ha dicho por escrito</a> que sus funciones de IA no requieren ningún schema especial. La etiqueta correcta evita que las máquinas tengan que adivinar qué es tu contenido, y ahí se acaba su potencial.</p>
<h2>La familia <code>WebPage</code>: sus apellidos</h2>
<p>El segundo grupo es para páginas, <strong>contenido sin la lógica de autor y fecha de un artículo</strong>. La estructura se repite, con un tipo genérico y varios subtipos que lo afinan:</p>
<ul>
<li><code>WebPage</code>: la página genérica, tu elección por defecto para páginas y la correcta en el 90% de los casos.</li>
<li><code>AboutPage</code>: la página «sobre mí» o «sobre nosotros». Refuerza la identidad del sitio, que es de lo que hablamos un poco más abajo.</li>
<li><code>ContactPage</code>: la página de contacto, una señal de transparencia que a las máquinas les viene de perlas para saber cómo localizarte.</li>
<li><code>ProfilePage</code>: el perfil de una persona o entidad. Es el único de este grupo con función propia <a href="https://developers.google.com/search/docs/appearance/structured-data/profile-page" target="_blank" rel="noopener">documentada por Google</a> desde noviembre de 2023, y el propio Google recomienda usarlo en las páginas de autor que enlaza el schema A<code>Tu código aquí</code>rticle, pura señal <a href="https://ayudawp.com/eeat-wordpress/" target="_blank" rel="noopener">E-E-A-T</a> (experiencia, conocimiento, autoridad y confianza, su mantra de calidad).</li>
<li><code>CollectionPage</code>: páginas que recopilan otras cosas, como un directorio de recursos o un listado de herramientas.</li>
<li><code>ItemPage</code>: una página dedicada a un único elemento concreto, la ficha de algo que no está a la venta.</li>
</ul>
<p>Ninguno de estos tipos te va a pintar estrellitas en Google, y no pasa nada. <strong>Su trabajo es de identidad, decirle a quien rastrea tu web qué es cada página dentro del conjunto</strong>, que es lo que un asistente necesita para citarte bien.</p>
<h2>Los que no suelen estar en el selector de Schema, y casi mejor</h2>
<p>Faltan los famosos <code>Product</code>, <code>Recipe</code>, <code>Event</code>, <code>VideoObject</code> y <code>LocalBusiness</code> y si no los he incluido en Visibility no ha sido por despiste, es una decisión que tiene sus motivos.</p>
<p>El motivo principal para no incluir en un plugin de SEO por defecto este montón de tipos de Schema es que todos esos tipos tienen <strong>propiedades obligatorias que tu contenido no lleva (normalmente) de serie</strong>.</p>
<p>Un <code>Product</code> exige precio, moneda y disponibilidad, un <code>Recipe</code> quiere ingredientes y tiempos, un <code>Event</code> pide fechas y lugar, para que nos entendamos rápido.</p>
<p>Generar esas etiquetas sin sus propiedades te genera errores en Search Console, y <strong>un schema con errores es peor que no tener schema</strong>, porque le estás enseñando a Google cajas que prometen un contenido pero que al abrirlas están vacías.</p>
<p>Hay una segunda razón de peso, y es que <strong>quien de verdad posee ese dato ya genera ese schema</strong>. Un ejemplo que conocerás de sobras es WooCommerce, que ya genera el <code>Product</code> con el precio y el inventario reales.</p>
<p>Plugins muy conocidos, como por ejemplo The Events Calendar, genera el <code>Event</code> con sus fechas, y los plugins de recetas tipo WP Recipe Maker hacen lo propio con el <code>Recipe</code>.</p>
<p>Si Visibility, u otro plugin de SEO, te dejase elegir <code>Product</code> en el desplegable de una entrada, estaría duplicando o, peor todavía, contradiciendo al plugin que tiene los datos buenos, y de serie.</p>
<p>También hay que decirlo, los plugins de SEO que ofrecen estos tipos mediante un <strong>constructor de campos manuales de datos estructurados</strong> lo hacen bien si te molestas en rellenarlos, y si es así al menos tienes la oportunidad de hacerlo bien.</p>
<p>El problema es el desplegable alegre que te deja marcar cualquier cosa sin pedirte los datos, que de esos también hay. Si algún día estos tipos decido meterlos en Visibility será con un constructor de campos en condiciones, que <strong>lo último que te hace falta es una casilla que te anime a mentirle a Google</strong>.</p>
<h2>El cementerio de los resultados enriquecidos</h2>
<p>Google lleva años haciendo poda de resultados enriquecidos, y ese recorte explica por qué tampoco verás <code>FAQ</code> ni <code>HowTo</code> en el selector de tipos de Schema.</p>
<p>La lista de bajas impresiona (que en paz descansen):</p>
<ul>
<li><code>HowTo</code>: limitado primero en móvil y <a href="https://developers.google.com/search/blog/2023/08/howto-faq-changes" target="_blank" rel="noopener">eliminado del todo en septiembre de 2023</a>. Los pasos con fotos en los resultados son historia.</li>
<li><code>FAQ</code>: restringido en agosto de 2023 a webs gubernamentales y de salud, y <a href="https://developers.google.com/search/docs/appearance/structured-data/faqpage" target="_blank" rel="noopener">rematado para todo el mundo el 7 de mayo de 2026</a>. Los desplegables de preguntas bajo tu resultado ya no existen para nadie, y en junio de 2026 desaparecieron también del informe de Search Console y de la prueba de resultados enriquecidos.</li>
<li>La masacre de junio de 2025: <code>Course Info</code>, <code>Claim Review</code>, <code>Estimated Salary</code>, <code>Learning Video</code>, <code>Special Announcement</code> y <code>Vehicle Listing</code>, <a href="https://developers.google.com/search/blog/2025/06/simplifying-search-results" target="_blank" rel="noopener nofollow">todos fuera por poco uso</a>.</li>
<li>La segunda tanda de noviembre de 2025: <a href="https://developers.google.com/search/blog/2025/11/update-on-our-efforts" target="_blank" rel="noopener nofollow">más funciones retiradas</a>, entre ellas los problemas de práctica (<em>practice problems</em>) desde enero de 2026.</li>
</ul>
<p>La razón, en el caso del <code>FAQ</code> es, para variar, el abuso por parte de los SEO y usuarios <em>demasiado comprometidos</em>, que se marcaron preguntas de relleno a mansalva para ocupar más sitio en los resultados hasta convertirlo en <strong>spam con acordeón</strong>. En el resto de casos Google simplifica su página de resultados para dejar hueco a sus propia funciones de IA.</p>
<p>Así que <strong>el marcado <code>FAQPage</code> sigue siendo schema.org válido y otros sistemas pueden leerlo, pero como truco para ganar espacio en Google está muerto</strong>, y si un tutorial de 2022 te anima a marcar <code>FAQ</code> para conseguir los desplegables, ya sabes de qué año es esa información.</p>
<h2>La identidad del sitio: <code>Organization</code>, <code>Person</code> y el baile de los <code>@id</code></h2>
<p>Queda un tipo de schema que no aparece en los desplegables, y es debido a que no es de página, es de sitio. Tu web entera tiene una identidad, una <strong><code>Organization</code> si eres una empresa o un proyecto, una <code>Person</code> si eres tú a título personal</strong>, y esa identidad debe declararse una sola vez, en la portada, con todos sus datos.</p>
<p>Aquí entra el baile de los <code>@id</code>, porque cada nodo de schema puede llevar un <code>@id</code>, que viene a ser su DNI, <strong>una URL única que permite que otros schemas lo referencien en vez de repetirlo</strong>.</p>
<p>Si usas <a href="https://es.wordpress.org/plugins/vigia/" target="_blank" rel="noopener">VigIA</a>, que emite el JSON-LD de identidad del sitio en la portada, Visibility detecta ese nodo y hace que el <code>publisher</code> de cada artículo apunte al mismo <code>@id</code> en lugar de crear una Organization duplicada.</p>
<p>Dos fichas de la misma entidad con datos distintos confunden a cualquier máquina, y <strong>la gracia de coordinar los <code>@id</code> es que todo tu sitio dice lo mismo sobre quién eres, lo mire quien lo mire</strong>.</p>
<p>Lo bueno de usar este conjunto es que <strong>se complementan sin pisarse</strong>, la ventaja de coordinar plugins, en principio para usos diferentes, pero al final todo tiene algo de relación, como es el caso.</p>
<h2>Cómo comprobar si lo has hecho bien</h2>
<p>Tres pruebas rápidas y gratis:</p>
<ol>
<li>Abre el código fuente de una entrada (clic derecho en la página) y busca <code>application/ld+json</code>. Ahí verás el bloque con el <code>@type</code> que has elegido, junto al <code>BreadcrumbList</code> (las migas de pan) que Visibility añade por su cuenta.</li>
<li>Pasa la URL por la <a href="https://search.google.com/test/rich-results" target="_blank" rel="noopener nofollow">prueba de resultados enriquecidos de Google</a> para ver qué funciones detecta. Ojo, solo te enseñará las que Google mantiene vivas.</li>
<li>Pasa la misma URL por el <a href="https://validator.schema.org/" target="_blank" rel="noopener nofollow">validador de schema.org</a>, que comprueba si el marcado es válido aunque Google no pinte nada con él. Para los tipos que Google ignora, este es tu árbitro.</li>
</ol>
<h2>Chuleta rápida para casi ni pensar</h2>
<table>
<thead>
<tr>
<th>Contenido</th>
<th>Tipo recomendado</th>
</tr>
</thead>
<tbody>
<tr>
<td>Entrada de blog</td>
<td><code>BlogPosting</code> (o «Por defecto»)</td>
</tr>
<tr>
<td>Noticia o actualidad del sector</td>
<td><code>NewsArticle</code></td>
</tr>
<tr>
<td>Tutorial, guía o documentación</td>
<td><code>TechArticle</code></td>
</tr>
<tr>
<td>Estudio con metodología</td>
<td><code>ScholarlyArticle</code></td>
</tr>
<tr>
<td>Informe o análisis con datos</td>
<td><code>Report</code></td>
</tr>
<tr>
<td>Página corriente</td>
<td><code>WebPage</code></td>
</tr>
<tr>
<td>Página «sobre mí» o «sobre nosotros»</td>
<td><code>AboutPage</code></td>
</tr>
<tr>
<td>Página de contacto</td>
<td><code>ContactPage</code></td>
</tr>
<tr>
<td>Recopilación, directorio o listado</td>
<td><code>CollectionPage</code></td>
</tr>
<tr>
<td>Página de autor o perfil</td>
<td><code>ProfilePage</code></td>
</tr>
<tr>
<td>Ficha de un elemento único (sin venta)</td>
<td><code>ItemPage</code></td>
</tr>
</tbody>
</table>
<p>Si después de la tabla sigues con dudas, déjalo en «Por defecto», que para eso está y no te vas a equivocar. <strong>Lo importante es no mentir con la etiqueta, el subtipo perfecto es secundario</strong>.</p>
<p>Si quieres seguir tirando del hilo de cómo leen tu web los asistentes de IA, tengo <a href="https://ayudawp.com/categoria/seo/" target="_blank" rel="noopener">unas cuantas guías publicadas sobre el tema de visibilidad en IAs</a>.</p>
<p>Para dudas concretas sobre tu caso, que seguro que las hay porque este tema las genera solas, me tienes ahí abajo, en la sección de comentarios.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/schemas-article-webpage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Por qué el robots.txt es un problema gordo en WordPress multisitio … pero afortunadamente tiene solución</title>
		<link>https://ayudawp.com/robots-txt-wordpress-multisitio/</link>
					<comments>https://ayudawp.com/robots-txt-wordpress-multisitio/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Thu, 23 Jul 2026 06:28:23 +0000</pubDate>
				<category><![CDATA[SEO / AEO / GEO / AIO]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Content Signals]]></category>
		<category><![CDATA[Experto]]></category>
		<category><![CDATA[llms.txt]]></category>
		<category><![CDATA[robots.txt]]></category>
		<category><![CDATA[Visibility]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159867</guid>

					<description><![CDATA[Quieres que un sitio tenga unas reglas en el robots.txt y otro las suyas, porque no todos necesitan lo mismo, y resulta que WordPress te sirve el mismo robots.txt para todos]]></description>
										<content:encoded><![CDATA[<p>Si gestionas una <strong>red de WordPress con varios sitios</strong> esto te va a sonar…</p>
<p><strong>Quieres que un sitio tenga unas reglas en el <code>robots.txt</code> y otro las suyas</strong>, normal ¿no?, porque no todos necesitan lo mismo, y resulta que <strong>WordPress te sirve el mismo <code>robots.txt</code> para todos</strong>. Y encima, si abres el de cualquiera de los dominios, ves uno que no has puesto tú.</p>
<p>Me lo trajo hace poco un cliente <a href="https://mantenimiento.ayudawp.com/" target="_blank" rel="noopener">del servicio de mantenimiento</a>, con un multisitio de varios dominios, que me pidió <strong>tocarle los <code>robots.txt</code> de cada web</strong>.</p>
<p>Cuando me puse a mirarlo <strong>resulta que el problema no era suyo ni de su configuración, era de cómo funciona WordPress por dentro con los ficheros en una red multisitio</strong>.</p>
<p>Así que aprovecho para contártelo con calma, porque tiene más miga de la que parece. Y sí, ya te lo adelanto, <strong>se puede tener un robots.txt distinto por sitio en una red multisitio de WordPress</strong>, pero antes hay que darle una pensada, porque todo tiene sus matices.</p>
<h2>¿Por qué en cada dominio de WordPress multisitio hay dos archivos para robots?</h2>
<p>Primero, un apunte rápido para quien llegue nuevo. WordPress no crea un fichero <code>robots.txt</code> de verdad en el disco, lo genera dinámicamente cada vez que alguien lo pide, lo que se llama un <code>robots.txt</code> virtual. Puedes verlo y modificarlo, pero eso ya te lo conté al detalle en <a href="https://ayudawp.com/robots-txt-virtual-wordpress/" target="_blank" rel="ugc noopener">el post sobre el robots.txt virtual de WordPress</a>, con el truco de verlo tecleando <code>?robots=1</code> y el filtro para cambiarlo.</p>
<p>El caso de mi cliente era que en su multisitio hay un <code>robots.txt</code> físico, un fichero de verdad, en la raíz del dominio principal, el que aloja la red y desde el que se instalan los plugins y el tema.</p>
<p>Y <strong>como toda la red comparte esa misma carpeta raíz, ese fichero se sirve igual para todos los dominios</strong>, así que tecleas <code>otro-dominio.com/robots.txt</code> y <strong>sale el del principal, no el del subsitio, porque no tiene un <code>robots.txt</code> físico</strong>, no es posible.</p>
<p><strong>¿Y el virtual de cada sitio, el que tú crees que estás editando con tu plugin de SEO?</strong> Ahí sigue, pero solo aparece si lo fuerzas a mano con <code>otro-dominio.com/?robots=1</code>.</p>
<p><strong>Los rastreadores piden siempre <code>/robots.txt</code>, así que se meriendan el físico compartido y nunca ven las reglas propias de cada web</strong>. De ahí la sensación de tener dos, el que sirven los bots y el que gestiona el plugin, cada uno con sus reglas y sin enterarse el uno del otro.</p>
<p><strong>¿Y por qué gana el físico?</strong> Pues porque cuando existe uno en la raíz, <strong>lo entrega el servidor web antes de que WordPress ni siquiera arranque</strong>, así que el virtual y el filtro se quedan sin pintar nada para esa dirección.</p>
<h2>Subdominios, dominios mapeados y subcarpetas</h2>
<p>El estándar del <code>robots.txt</code>, recogido en el RFC 9309 que es la norma oficial, dice que <strong>el archivo vive en la raíz de cada host, o sea de cada dominio o subdominio</strong>, y de ahí salen tres escenarios muy distintos según cómo tengas montada la red.</p>
<ul>
<li><strong>Red por subdominios</strong> (<code>es.tudominio.com</code>, <code>en.tudominio.com</code>): cada sitio es un host distinto, así que cada uno puede y debe tener su propio <code>robots.txt</code>. Aquí lo de «uno por sitio» tiene todo el sentido.</li>
<li><strong>Red por dominios mapeados</strong> (<code>dominio.com</code>, <code>domain.com</code>): igual que el anterior, cada dominio es un host, así que cada uno lleva el suyo.</li>
<li><strong>Red por subcarpetas</strong> (<code>dominio.com/es</code>, <code>dominio.com/en</code>): todos comparten el mismo host, así que solo hay un <code>robots.txt</code> que cuente, el de la raíz del dominio, y manda el sitio principal. Un subsitio en subcarpeta no puede servir el suyo a los rastreadores por mucho plugin que le pongas.</li>
</ul>
<p><strong>Y ojo, que lo de las subcarpetas no es una carencia de WordPress, es el propio estándar.</strong></p>
<p>El <code>robots.txt</code> va en la raíz del host y punto, así que si tu red es por subcarpetas, lo máximo que puedes hacer es meter todas las reglas que necesites, conjuntas, en el <code>robots.txt</code> del dominio principal, teniendo cuidado de no meter reglas que solo sirvan para el dominio o una carpeta concreta, todas generales.</p>
<h2>¿Qué hago con el robots.txt del sitio principal?</h2>
<p>Da igual la vía que elijas luego, con código o con plugin, s<strong>i hay un <code>robots.txt</code> físico en la raíz y quieres reglas por subsitio quítalo, porque carga antes que WordPress y ningún plugin o PHP se lo puede saltar.</strong></p>
<p>Mientras ese fichero siga ahí los bots seguirán leyéndolo a él y las reglas por sitio no llegarán a ninguna parte.</p>
<p>Pero, si es el caso, <strong>con quitarlo no basta, además tienes que asegurarte de que ningún plugin te lo vuelve a crear</strong>. El editor de ficheros de Yoast, por ejemplo, escribe un <code>robots.txt</code> físico si le das al botón, y en una red ese fichero se te cuela para todos. Así que bórralo, comprueba por FTP que no reaparece, <a href="https://ayudawp.com/desactivar-el-editor-de-plugins-y-temas-en-wordpress-3-0/" target="_blank" rel="noopener">desactiva la edición de archivos dentro de WordPress</a>, y solo entonces pasamos al siguiente paso.</p>
<p>Una vez fuera  el archivo físico <strong>WordPress ya sirve el virtual de cada sitio</strong> por su cuenta, y <strong>ahí sí puedes empezar a configurar en cada web el suyo</strong>. En subdominios y dominios mapeados esto funciona tal cual, cada host sirve el suyo. En subcarpetas no hay manera, se siente, solo cuenta el del dominio principal.</p>
<h2>Cómo darle reglas propias de robots a cada subsitio de una red multisitio (con código)</h2>
<p>Si no quieres depender de ningún plugin de SEO para esto, WordPress trae un filtro, <code>robots_txt</code>, que te deja modificar el robots.txt virtual, y combinándolo con <code>get_current_blog_id()</code> (la función que te dice en qué sitio de la red estás) puedes dar reglas distintas según la web. La idea, que he ido ampliando y actualizando, me la dio <a href="https://florianbrinkmann.com/en/modifying-robots-txt-for-individual-sites-of-a-multisite-install-3364/" target="_blank" rel="nofollow noopener">Florian Brinkmann</a>, en un post de hace ya unos pocos años.</p>
<p>Lo que hay que hacer es meter el siguiente código en un <code>mu-plugin</code> que se activa en toda la red. Lo subes por FTP a la carpeta <code>wp-content/mu-plugins</code> y listo:</p>
<pre>/**
 * Plugin Name: Archivo robots.txt por sitio en WordPress Multisitio
 * Plugin URI: https://ayudawp.com/
 * Description: Permite definir reglas de robots.txt diferentes para cada sitio en una red multisitio de WordPress.
 * Version: 1.0
 * Author: Fernando Tellado
 * Author URI: https://tellado.es
 */

// Añade reglas por sitio al archivo robots.txt virtual de cada sitio a través de la red
add_filter( 'robots_txt', 'ayudawp_multisite_robots_txt', 20, 2 );

function ayudawp_multisite_robots_txt( $output, $public ) {

// Solo funciona si es multisitio
if ( ! is_multisite() ) {
return $output;
}

// Reglas por sitio asignadas por ID de blog (tienes el ID en Administrador de la red &amp;gt; Sitios)
switch ( get_current_blog_id() ) {

// Sitio con ID 2: tienda online
case 2:
$output .= "Disallow: /carrito/\n";
$output .= "Disallow: /finalizar-compra/\n";
$output .= "Disallow: /mi-cuenta/\n";
break;

// Sitio con ID 3: blog
case 3:
$output .= "Disallow: /?s=\n";
$output .= "Disallow: /descargas/\n";
$output .= "Disallow: /gracias/\n";
break;
}

return $output;
}</pre>
<p>Cambias los ID (<code>case x</code>)  y las reglas por las tuyas, y cada web servirá las suyas.</p>
<p>El código tiene sus límites, como que es obvio que lo mantienes tú a mano cada vez que cambien las necesidades, y luego claro está, no se puede aplicar a otros archivos, como el <code>llms.txt</code>, que arrastra el mismo problema. Y por supuesto, te recuerdo de nuevo que en una red en subcarpetas no hay milagro que valga.</p>
<h2>¿Afecta esto también al llms.txt?</h2>
<p>Ya que estás con el <code>robots.txt</code>, los archivos <code>llms.txt</code> sufren del mismo problema.</p>
<p>Es un fichero que <strong>sirve de índice en Markdown</strong> de tu web para los agentes de IA, y <strong>en una red cada sitio querría el suyo</strong>. Mismo patrón que el <code>robots.txt</code>, por sitio si lo sirves dinámico, y compartido y roto si escribes un físico en la raíz. La diferencia con el <code>robots.txt</code> es que aquí ni el filtro tienes.</p>
<p>WordPress no genera archivos <code>llms.txt</code> ni trae ninguna función para tocarlo, así que el <code>mu-plugin</code> de arriba no sirve y por código te quedas sin un atajo como el del <code>robots.txt</code>. Para tenerlo por sitio en una red la vía práctica es un plugin que lo genere dinámico por sitio, y de eso va lo que viene ahora.</p>
<h2>Cómo darle reglas propias de robots a cada sitio (con plugins)</h2>
<p>Si lo de mantener un mu-plugin no te apetece, o también quieres que el <code>llms.txt</code> sea configurable en cada sitio, esto <strong>lo resuelven algunos plugins</strong>.</p>
<p>De pago te lo ofrece AIOSEO, que tiene un editor de <code>robots.txt</code> de red que te deja tocar el de cada subsitio, pero solo en redes por subdominios, no por subcarpetas (lo dicen ellos en su documentación), y en su versión Pro. SEOPress anuncia edición de <code>robots.txt</code> para multisitio y multidominio, y luego hay plugins dedicados solo a esto, como Multisite Robots.txt Manager. De las subcarpetas nos seguimos olvidando, porque ya sabes que ahí manda el estándar.</p>
<p>Y luego está <strong><a href="https://wordpress.org/plugins/native-aeo-pack/" target="_blank" rel="nofollow noopener">Visibility</a></strong>, <strong>plugin gratuito de SEO que sirve el <code>robots.txt</code> y también el <code>llms.txt</code> de cada sitio de la red</strong> por su cuenta, sin que tengas que tocar nada.</p>
<p><strong>Entrega por una única URL, la de siempre</strong>, <code>/robots.txt</code>, y de paso arregla ese lío del <code>?robots=1</code> y los 404 en instalaciones en subcarpeta. Además, está pensado para no repetir el problema, porque en una red no escribe un físico compartido, solo lo escribe donde de verdad es del sitio, en una instalación normal o en el sitio principal de una red por subcarpetas.</p>
<p>Visibility <strong>sustituye a tu plugin de SEO, no convive con él</strong>, así que si vienes de Yoast u otro plugin, esto supone cambiar el que tuvieses por Visibility, no añadir uno más, que siempre es mala idea. Pero no es algo preocupante, no pierdes nada importante, tiene lo que los demás, y algunas cosas (casi todas) las hace mejor.</p>
<p>Ah, y da igual la elección, aunque uses Visibility <strong>el <code>robots.txt</code> físico de la raíz hay que quitarlo igual</strong>, porque un fichero que sirve el servidor no lo salta nadie. Eso sí, si Visibility detecta un físico compartido tapando el virtual, te avisa en su pestaña de descubrimiento para que sepas que está ahí y lo quites.</p>
<p>Y, por si no lo sabías Visibility, además de hacer lo que todos los demás plugins de SEO, redirecciones incluidas, también emite las señales por sitio (<code>robots.txt</code>, <code>llms.txt</code> y el schema), y si además quieres medir, tienes <a href="https://wordpress.org/plugins/vigia/" target="_blank" rel="nofollow noopener">VigIA</a>, que ofrece analítica de qué rastreadores de IA entran de verdad en cada web y puede bloquearlos, y puedes complementar el pack IA con <a href="https://es.wordpress.org/plugins/ai-content-signals/" target="_blank" rel="noopener">AI Content Signals</a>, que añade las directivas de IA de Cloudflare.</p>
<h2>Resumiendo: Qué hacer con los ficheros robots.txt en multisitio según el tipo de red</h2>
<p>En un par de líneas, por si ya estás con algo de lío:</p>
<ul>
<li><strong>Si tu red es por subdominios o por dominios mapeados</strong>: quita el físico de la raíz y luego das las reglas por sitio con el mu-plugin del filtro <code>robots_txt</code>, o dejas que lo haga tu plugin de SEO (o Visibility) por ti. Cada dominio servirá el suyo.</li>
<li><strong>Si tu red es por subcarpetas</strong>: solo hay un <code>robots.txt</code>, el del dominio principal, así que mete ahí todas las reglas que necesites para los distintos subsitios. Es el único sitio donde los bots las van a leer.</li>
</ul>
<h2>¡Te toca decidir!</h2>
<p>Antes de tocar nada, échale un vistazo a tu red y mira si tienes el problema. Pide el <code>robots.txt</code> de cada dominio y compáralos, y si todos te devuelven exactamente el mismo, tienes un físico compartido mandando sobre todos.</p>
<p>Desde el terminal es tan fácil como teclear la URL tipo <code>https://dominio.com/robots.txt</code> cambiando el dominio o subdominio, y comparar lo que sale. Y si quieres ver el virtual la URL es añadir <code>?robots=1</code> al dominio o subdominio.</p>
<p>Con eso claro <strong>decides si quitar el físico y tirar de código, o quitar el físico y dejar que un plugin te sirva el de cada sitio</strong>. Lo que no funciona es dejar el <code>robots.txt</code> físico compartido ahí, porque se antepone en toda la red y, salvo que uses las mismas reglas para todos los subsitios, puedes estar creándote un problema de rastreo.</p>
<p>Si tienes una red montada de una forma rara, o te topas con algún caso que no encaja con esto, me tienes en los comentarios aquí abajo, que estos temas de multisitio siempre traen su cosilla, y no lo usa muchísima gente.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/robots-txt-wordpress-multisitio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>¿En qué te afecta el reglamento europeo sobre inteligencia artificial AI Act si tienes una web WordPress?</title>
		<link>https://ayudawp.com/ai-act/</link>
					<comments>https://ayudawp.com/ai-act/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Wed, 22 Jul 2026 06:28:59 +0000</pubDate>
				<category><![CDATA[IA + WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[AESIA]]></category>
		<category><![CDATA[AI Act]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Principiante]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159915</guid>

					<description><![CDATA[El reglamento europeo de inteligencia artificial obliga a avisar cuando cierto contenido está hecho o tocado por IA, pero no todo, ni mucho menos, así que la primera buena noticia es que la mayoría de lo que publicas en tu WordPress no va a necesitar ningún cartel.]]></description>
										<content:encoded><![CDATA[<p>Desde el 2 de agosto de 2026 <strong>el reglamento europeo de inteligencia artificial obliga a avisar cuando cierto contenido está hecho o tocado por IA</strong>, pero no todo, ni mucho menos, así que la primera buena noticia es que la mayoría de lo que publicas en tu WordPress no va a necesitar ningún cartel de aviso. La obligación legal se centra en tres casos concretos, un chatbot que no se identifica como tal, un <em>deepfake</em> (vídeo, imagen o voz que ha sido manipulado utilizando IA) y un texto sobre un asunto serio sin revisión humana.</p>
<p>Y el problema es que la mayoría de la información disponible sobre el tema está mezclada, sin querer, entre el aplazamiento de las obligaciones de alto riesgo y lo que de verdad te toca a ti con un sitio WordPress. Vamos a separarlo con calma, caso por caso, sin dar nada por hecho, a ver si soy capaz de explicártelo como yo lo he entendido, y como lo aplico.</p>
<h2>Quién es quién ante la norma: proveedor y responsable del despliegue</h2>
<p>El reglamento reparte las obligaciones entre dos papeles distintos, y confundirlos es la fuente de la mitad de los problemas que te puedes buscar sin ayuda de nadie.</p>
<ul>
<li>El <strong>proveedor</strong> es quien construye y comercializa el sistema de IA, Anthropic con Claude, OpenAI con ChatGPT, Google con Gemini.</li>
<li>El <strong>responsable del despliegue</strong> es quien usa esa herramienta ya hecha para su propio contenido, o sea, tú con tu WordPress.</li>
</ul>
<p>Piénsalo como la diferencia entre quien fabrica un coche y quien lo conduce. Al fabricante le tocan las revisiones técnicas del motor, la homologación, que las piezas cumplan norma, al conductor le toca circular con las luces encendidas de noche y llevar el cinturón puesto. Son obligaciones distintas sobre el mismo vehículo, y confundir una con otra no libra a nadie de la suya.</p>
<p>En la práctica <strong>casi todo lo que te afecta a ti como propietario de un WordPress cae del lado del responsable del despliegue</strong>. El marcado técnico invisible del contenido, ese que debe ser legible por una máquina, corresponde al proveedor del modelo, no a ti. Lo que sí te toca es el aviso visible al usuario, y ahí es donde vamos a entrar ahora.</p>
<h2>¿Y si no estás en España, o ni siquiera en la Unión Europea?</h2>
<p>Aquí conviene hacerse una pregunta que va más allá de dónde vive tu empresa o dónde tienes contratado el hosting. El reglamento europeo tiene alcance extraterritorial, igual que el RGPD con el que ya convives si tienes un formulario de contacto en tu web. Se aplica también a proveedores y responsables del despliegue establecidos en un tercer país cuando el resultado que produce el sistema de IA se usa dentro de la Unión Europea.</p>
<p>Vamos, en lo que nos afecta, <strong>si tu web la lee gente en algún país de la Unión Europea, algo que le pasa a prácticamente cualquier blog público con un mínimo de tráfico, el reglamento entra en juego</strong> aunque tú estés en México, Argentina o al otro lado del mundo. No hace falta que factures en euros ni que tengas oficina en Europa.</p>
<p>Dicho esto, y como pasa siempre que se habla de normativa, esto es información general para que entiendas el criterio, no una sentencia sobre tu caso concreto. Si tienes dudas serias porque tu negocio tiene peso real en la Unión Europea, consulta con un abogado especializado, que para eso están.</p>
<h2>Los tres casos que de verdad te afectan en un WordPress</h2>
<p><img decoding="async" class="alignnone size-full wp-image-159977" src="https://ayudawp.com/wp-content/uploads/2026/07/AI-Act.jpg" alt="" width="1200" height="800"></p>
<p>El artículo 50 del reglamento, que es el que regula la transparencia, cubre varios supuestos, pero solo tres tienen encaje real en un sitio WordPress «normal».</p>
<h3>Un chatbot o asistente que habla con tus visitantes</h3>
<p>Si tienes un <a href="https://ayudawp.com/crear-chatbot-ia/" target="_blank" rel="ugc noopener">chatbot de atención al cliente</a>, la norma exige que quien interactúa con él sepa que está hablando con una máquina, salvo que sea tan obvio que no haga falta decirlo, un bot con nombre «Asistente IA» y avatar de robot no necesita cartel adicional. La excepción de la obviedad no es una puerta trasera para no avisar, es sentido común aplicado a los casos donde nadie en su sano juicio pensaría que habla con una persona.</p>
<h3>Una imagen, audio o vídeo que sea un deepfake</h3>
<p>Aquí está el mito más extendido de todos, la idea de que toda imagen generada con IA necesita aviso, y no es así. La obligación solo se activa con deepfakes, y la propia norma define el término con precisión, pues <strong>se refiere únicamente a contenido de imagen, audio o vídeo creado o modificado por IA que imita</strong> a personas, objetos, lugares, entidades o hechos reales de forma que pudiera hacer creer a alguien que es genuino.</p>
<p>Una ilustración abstracta para acompañar un artículo de seguridad, un fondo decorativo, una infografía inventada, nada de eso es deepfake, porque no simula que algo real haya ocurrido. <strong>Donde sí entras en el supuesto es si generas una imagen que aparenta ser una captura real de un evento que nunca pasó</strong>, o que hace pasar por auténtica la imagen de una persona real en una situación inventada.</p>
<h3>Un texto sobre un asunto de interés público</h3>
<p>Este es el que caso que tiene más matices de los tres. De lo que se trata es que <strong>si usas IA para generar o manipular texto que se publica con el fin de informar sobre asuntos de interés público</strong>, tienes que avisar de que es artificial, salvo que ese texto haya pasado por una revisión editorial sustantiva y haya una persona, física o jurídica, que asuma la responsabilidad editorial de lo publicado.</p>
<p>El matiz más relevante es que las directrices de la Comisión Europea interpretan esa excepción de forma estricta. <strong>No vale una revisión superficial ni un visto bueno de trámite</strong>, tiene que haber un examen deliberado del fondo del contenido por alguien con criterio suficiente para hacerlo. Corregir la ortografía o dar el visto bueno sin leerte el texto entero no cuenta.</p>
<p>Para la inmensa mayoría de tutoriales técnicos, el supuesto ni siquiera se activa, porque explicar cómo desactivar un widget no es informar de un asunto de interés público en el sentido que persigue la norma. Pero un artículo sobre una vulnerabilidad que afecta a un millón de webs, o sobre este mismo reglamento, empieza a acercarse a esa categoría, así que conviene tenerlo presente cuando el tema es importante.</p>
<table>
<thead>
<tr>
<th>Caso</th>
<th>¿Hay que avisar?</th>
<th>Por qué</th>
</tr>
</thead>
<tbody>
<tr>
<td>Chatbot que interactúa con visitantes</td>
<td>Sí, salvo que sea obvio</td>
<td>Artículo 50.1: evita que alguien crea hablar con una persona</td>
</tr>
<tr>
<td>Imagen, audio o vídeo que es deepfake</td>
<td>Sí</td>
<td>Artículo 50.4: simula algo real que no ha ocurrido</td>
</tr>
<tr>
<td>Ilustración o imagen decorativa sin pretensión de realismo</td>
<td>No</td>
<td>No cumple la definición de deepfake</td>
</tr>
<tr>
<td>Texto sobre un asunto de interés público, sin revisión editorial sustantiva</td>
<td>Sí</td>
<td>Artículo 50.4, párrafo dedicado al texto</td>
</tr>
<tr>
<td>Texto sobre un asunto de interés público, con revisión tuya a fondo</td>
<td>No</td>
<td>Aplica la excepción de responsabilidad editorial</td>
</tr>
<tr>
<td>Tutorial técnico habitual, sin relación con asuntos de interés público</td>
<td>No</td>
<td>Queda fuera del supuesto por la propia naturaleza del contenido</td>
</tr>
</tbody>
</table>
<p>Cuando lo ves así, en una tabla, el titular de «hay que etiquetar todo lo que hagas con IA» se cae solo.</p>
<h2>Mitos sobre AI Act</h2>
<p>Antes de seguir, cinco ideas que circulan por ahí y que no ayudan nada.</p>
<ul>
<li><strong>«Se ha retrasado el AI Act»:</strong> Cierto a medias, y la parte cierta es justo la que no te afecta. La Unión Europea sí ha aplazado las obligaciones de los sistemas de alto riesgo, empleo, biometría, infraestructuras críticas, hasta diciembre de 2027 y agosto de 2028. Pero las obligaciones de transparencia del artículo 50, las que trata este artículo, no se han tocado y siguen entrando en vigor el 2 de agosto de 2026. Quien lea «se retrasa el AI Act» y deje de prepararse por completo se va a llevar un disgusto.</li>
<li><strong>«Tengo que etiquetar cada imagen que hago con IA»:</strong> Ya lo hemos visto arriba, y solo los deepfakes necesitan aviso, y la mayoría de las imágenes ilustrativas de un blog no lo son ni de lejos.</li>
<li><strong>«Como la ley española no está en el BOE, tengo tiempo»:</strong> El proyecto de ley española, que ya está en el Congreso, no inaugura estas obligaciones, las adapta con maquinaria propia de sanción en España. El reglamento europeo es de aplicación directa, con ley española o sin ella, así que el reloj corre igual.</li>
<li><strong>«Me pueden caer 35 millones de euros por no avisar»:</strong> Esa cifra corresponde a las prácticas prohibidas del artículo 5, cosas como la manipulación subliminal o la valoración social, no al incumplimiento del artículo 50. Lo que arriesgas aquí son multas de hasta 15 millones de euros o el 3 % de la facturación mundial, según lo que sea mayor, que tampoco es una broma, pero conviene tener la cifra correcta.</li>
<li><strong>«Tengo que revisar y etiquetar todo lo que ya he publicado»:</strong> No. La obligación se aplica a partir del 2 de agosto de 2026, el contenido que ya llevaba tiempo circulando antes de esa fecha no necesita marcado retroactivo. Lo que sí entra en juego es todo lo que generes o publiques a partir de ese día.</li>
</ul>
<h2>El caso de los resúmenes generados con IA</h2>
<p>Vamos a bajarlo a un ejemplo real, que es más útil que quedarse en la teoría. Cada vez hay más plugins, el mío incluido con <a href="https://wordpress.org/plugins/ai-share-summarize/" target="_blank" rel="ugc noopener">Share Buttons &amp; AI-powered Summaries</a>, que generan un <a href="https://ayudawp.com/resumenes-ia-integrados/" target="_blank" rel="ugc noopener">resumen automático de la entrada</a> con un proveedor de IA externo. ¿Ese resumen necesita aviso?</p>
<p>Pues bien, las directrices de la Comisión, al desarrollar el artículo 50.2, ponen a los resúmenes generados por IA en la lista de <strong>cambios sustantivos, junto a las traducciones o la eliminación de objetos</strong> de una imagen, frente a la edición estándar que sí queda exenta, como corregir ortografía o ajustar el color.</p>
<p>Esa parte concreta de la norma habla del marcado técnico que corresponde al proveedor del modelo, no directamente de tu aviso al lector, pero deja clara una cosa, que <strong>un resumen no es una tontería formal, es contenido nuevo con entidad propia</strong>.</p>
<p>La pregunta que de verdad te afecta como responsable del despliegue es si ese resumen entra en el supuesto de texto sobre un asunto de interés público y si ha pasado por esa revisión editorial de la que hablábamos antes. Y ojo, <strong>revisar el artículo del que sale el resumen no es lo mismo que revisar el resumen</strong> en sí, que suele generarse solo, en cada visita o en cada publicación, sin que nadie le eche un vistazo concreto a esa pieza de texto en particular.</p>
<p>Por suerte la salida práctica no depende de resolver ese debate. <strong>Share Buttons &amp; AI-powered Summaries ya muestra por defecto la etiqueta «Resumen generado con IA» encima de cada resumen</strong>, así que si usas el plugin sin tocar ese ajuste, este supuesto no te da ningún quebradero de cabeza.</p>
<p>El matiz es que el texto de la etiqueta es configurable, y si lo cambias por algo que no mencione la IA, o lo quitas directamente, la responsabilidad de que el aviso siga ahí es tuya, no del plugin. La herramienta te pone el camino fácil, no te lo puede recorrer por ti.</p>
<p>Esto vale igual si generas el resumen con cualquier otro plugin o a mano con tu proveedor de IA favorito.  La etiqueta de una línea, «resumen generado con inteligencia artificial» o similar, resuelve el debate entero sin necesidad de elucubrare si tu web informa o no de un asunto de interés público.</p>
<h2>Textos alternativos e imágenes generadas con IA</h2>
<p>WordPress 7 trae de serie una <a href="https://ayudawp.com/seguridad-conectores-ia-wordpress/" target="_blank" rel="ugc noopener">pantalla de conectores de IA</a> donde guardas tu clave de Anthropic, OpenAI o Gemini para que cualquier plugin compatible la use. Si la usas para generar texto alternativo de tus imágenes o para crear una ilustración con la que acompañar un artículo, ¿entras en el supuesto de aviso?</p>
<p>Con el <strong>texto alternativo la respuesta corta es que no</strong>, y aquí no hay una directriz de la Comisión que lo diga con esas palabras exactas, así que es mi lectura razonada del propósito de la norma, no una cita textual de nadie. El <code>alt</code> describe una imagen para quien usa lector de pantalla, no informa al público de ningún asunto, ni siquiera lo ve quien navega con la vista, así que se queda fuera del espíritu del artículo 50.4 igual que se quedaría fuera un pie de foto meramente descriptivo.</p>
<p>Con las <strong>imágenes ilustrativas</strong> aplica exactamente lo que vimos antes, pues si no simula un hecho, una persona o un lugar real de forma creíble, no es deepfake y no necesita aviso.</p>
<p>Y para quien se pregunte quién marca técnicamente qué cuando usa el conector, el proveedor del modelo que hayas conectado, Anthropic, OpenAI o Google, es quien responde del marcado legible por máquina del artículo 50.2. Tú, como responsable del despliegue, respondes de lo que ya hemos visto, el aviso visible cuando el contenido lo requiere. Usar el conector nativo no te añade ninguna obligación nueva que no tuvieras ya generando el mismo contenido por otra vía.</p>
<h2>Qué deberías tener listo desde ya</h2>
<p>Con todo lo anterior ya tienes el criterio. Esto es lo concreto que conviene dejar hecho:</p>
<ul>
<li>Revisa si tienes chatbot o asistente de IA en la web, y confirma que el visitante sabe que habla con una máquina.</li>
<li>Si generas imágenes con IA plantéate en cada caso si podría confundirse con algo real, no solo si «se ve muy realista».</li>
<li>Si usas resúmenes generados con IA mejor con la etiqueta visible que sin ella, cuesta una línea de HTML y te ahorra la inquietud y un posible susto.</li>
<li>No toques lo ya publicado antes del 2 de agosto de 2026 solo por esto, la obligación mira hacia delante.</li>
<li>Si tu contenido tiene peso en asuntos de interés público, documenta que lo revisas tú antes de publicar, no hace falta un proceso complicado, basta con que sea real y puedas explicarlo si alguien pregunta.</li>
</ul>
<p>Con la tabla de más arriba ya tienes el criterio completo caso por caso. Y si quieres el aviso de una línea listo para pegar en cualquier resumen o texto generado con IA, aquí lo tienes:</p>
<pre>&lt;div style="border-left: 4px solid #8a8a8a; background: #f5f5f5; padding: 10px 16px; margin: 16px 0; font-size: 0.9em; line-height: 1.5;"&gt;
  &lt;strong&gt;Aviso:&lt;/strong&gt; este resumen ha sido generado con inteligencia artificial.
&lt;/div&gt;</pre>
<p>La Unión Europea también ha publicado un <a href="https://digital-strategy.ec.europa.eu/en/policies/eu-icons-labelling-ai-generated-content" target="_blank" rel="nofollow noopener">conjunto de iconos oficiales</a> pensado para este etiquetado, por si prefieres un icono en vez de texto.</p>
<h2>España y la capa nacional: AESIA</h2>
<p>Todo lo anterior aplica ya, por el reglamento europeo, tengas o no ley española, pero si estás en España tenemos espía nuevo, gracias a esos políticos que siempre están pensando en nosotros.</p>
<p>El <a href="https://digital.gob.es/comunicacion/notas-prensa/mtdfp/2026/05/el-gobierno-aprueba-el-proyecto-de-ley-que-garantizara-una-super" target="_blank" rel="nofollow noopener">Gobierno español aprobó el proyecto de ley orgánica</a> para el buen uso y la gobernanza de la inteligencia artificial el 26 de mayo de 2026 y lo envió al Congreso, donde sigue su trámite parlamentario con paso por el Senado antes de publicarse en el BOE.</p>
<p>Esa ley no inventa las obligaciones que has leído en este artículo, las aplica con maquinaria sancionadora propia y designa a la Agencia Española de Supervisión de la Inteligencia Artificial, la AESIA, como autoridad principal para vigilar y sancionar. <strong>Mientras el texto sigue su trámite, este artículo se actualiza en cuanto haya novedad publicada en el BOE</strong>, así que no hace falta que vayas comprobándolo tú.</p>
<h2>Resumen rápido</h2>
<p>Si te quedas con una sola idea de todo esto, que sea esta: <strong>la norma no castiga usar IA, castiga hacerlo pasar por algo que no es</strong>.</p>
<p>Un chatbot que se presenta como humano, una imagen que finge ser una foto real, un texto que informa de algo serio sin que nadie se haya hecho responsable de su contenido, eso es lo que persigue el reglamento. Un resumen con su etiqueta, una ilustración decorativa, un texto alternativo bien escrito, ninguno de esos tres necesita que te compliques la vida.</p>
<p>Este artículo es información general para que entiendas el criterio y actúes con cabeza, no asesoría legal sobre tu caso concreto, así que si tu situación tiene matices importantes, consulta con un profesional. Y si detectas algo que ha cambiado, ley española publicada, directrices finales de la Comisión distintas de lo que cuento aquí, dímelo en los comentarios y actualizo el artículo.</p>
<p>Si quieres profundizar en la parte legal más amplia, tengo también la guía de <a href="https://ayudawp.com/registro-consentimiento-cookies-formularios-pedidos/" target="_blank" rel="ugc noopener">registro de consentimientos</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/ai-act/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>¿Por qué WordPress no acierta a optimizar el LCP … aún?</title>
		<link>https://ayudawp.com/image-prioritizer/</link>
					<comments>https://ayudawp.com/image-prioritizer/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Tue, 21 Jul 2026 06:28:32 +0000</pubDate>
				<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[WPO - Optimizar WordPress]]></category>
		<category><![CDATA[DietPress]]></category>
		<category><![CDATA[fetchpriority]]></category>
		<category><![CDATA[LCP]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159925</guid>

					<description><![CDATA[Existe una forma de que WordPress deje de adivinar el elemento inicial más pesado de tu página y lo sepa de verdad, a partir de datos reales de tus propios visitantes.]]></description>
										<content:encoded><![CDATA[<p>Hay un elemento en cada página, casi siempre una imagen, que <strong>pesa más que ningún otro en si tu web se siente rápida o lenta nada más entrar</strong>.</p>
<p>Me refiero a lo que Google mide como <a href="https://ayudawp.com/google-core-web-vitals-wordpress/" target="_blank" rel="noopener"><strong>LCP</strong></a> (el <strong>tiempo que tarda en aparecer el bloque más grande de tu pantalla</strong>), y cuanto antes aparezca, mejor.</p>
<p>El problema es que <strong>WordPress tiene que adivinar cuál es esa imagen</strong> sin haberte visto navegar, y esa adivinanza falla más de lo que te gustaría.</p>
<p>La buena noticia es que <strong>ya existe una forma de que WordPress deje de adivinar el elemento inicial más pesado de tu página y lo sepa de verdad</strong>, a partir de datos reales de tus propios visitantes.</p>
<p>En este artículo te cuento <strong>qué es, qué gana tu web con ello, qué pegas tiene todavía, y qué hacer</strong> si prefieres quedarte con algo más probado mientras tanto.</p>
<h2>Optimization Detective e Image Prioritizer</h2>
<p>El núcleo de WordPress lleva desde la versión 6.3 <a href="https://ayudawp.com/fetchpriority-wordpress/" target="_blank" rel="noopener">detectando de forma automática cuál es probablemente la imagen del LCP</a>, casi siempre la destacada, y le añade el atributo <code>fetchpriority="high"</code> sin que hagas nada.</p>
<p>El límite de esa detección automática es que <strong>se basa en heurísticas desde el servidor, reglas fijas que no saben cómo se ve realmente tu web</strong> en un móvil, en una tablet o con una ventana pequeña de escritorio.</p>
<p>Esas heurísticas aciertan la imagen correcta en torno a la mitad de las veces, mientras que la otra mitad, el navegador, recibe la orden de prioridad equivocada. <strong>Optimization Detective</strong> nace para resolver justo eso.</p>
<p>Es un plugin del equipo de rendimiento de WordPress que <strong>no optimiza nada por sí solo, es un framework que recoge datos reales de tus visitantes</strong> (o RUM, siglas de Real User Monitoring, monitorización de usuarios reales) sobre qué elemento se pinta primero en cada tipo de dispositivo.</p>
<p>No tiene pantalla de ajustes ni la va a tener, funciona solo, en segundo plano. El que hace algo con esos datos es <strong>Image Prioritizer</strong>, el plugin que depende de Optimization Detective para funcionar.</p>
<p>Con la información real de tus visitas, añade <code>fetchpriority="high"</code> a la imagen que de verdad es el LCP en cada punto de ruptura, ajusta la carga diferida para que no se quede vacío justo lo que sí se ve al entrar, y <strong>reduce el peso del fotograma inicial de los vídeos que hacen de LCP</strong>.</p>
<p>Anteriormente, Image Prioritizer también calculaba el atributo <code>sizes</code> de las imágenes responsive, pero ya no, esa función se quitó por un problema, y hoy ese trabajo lo hace otro plugin del mismo equipo, <a href="https://wordpress.org/plugins/auto-sizes/" target="_blank" rel="nofollow noopener">Enhanced Responsive Images</a>.</p>
<h2>¿Para cuándo estará esto en WordPress?</h2>
<p>El equipo de rendimiento suele probar la funcionalidad completa en un plugin independiente, la validan con tráfico real de decenas de miles de webs, y cuando por fin entra en el núcleo, suele hacerlo con ajustes más prudentes que los que tenía el plugin original.</p>
<p>Ya te conté ese proceso con la <a href="https://ayudawp.com/carga-especulativa-nativa/" target="_blank" rel="ugc noopener">carga especulativa nativa</a>, que también nació como plugin, se probó en más de 50.000 sitios, con una mejora media del 1,9% en LCP en los que lo llevaban activado, y aterrizó en WordPress 6.8 con el modo prefetch y la anticipación más conservadora en vez del <code>prerender</code> y la anticipación moderada que traía el plugin.</p>
<p>El cálculo del atributo <code>sizes</code> para imágenes con carga diferida siguió un camino parecido hasta la versión 6.7.</p>
<p>Dicho esto, <strong>no hay fecha para Optimization Detective ni para Image Prioritizer</strong>. Ninguno de los dos aparece nombrado de momento en planes de futuras versiones, solo Enhanced Responsive Images y View Transitions figuran como trabajo del equipo de rendimiento en marcha hacia alguna versión de WordPress de las próximas.</p>
<h2>Esa cosa es cojonuda ¿no? … pues no del todo</h2>
<p>Antes de que instales los dos plugins unos cuantos peros que conviene que conozcas:</p>
<ul>
<li><strong>Los dos siguen en beta:</strong> Optimization Detective en la 1.0.0-beta5 e Image Prioritizer en la 1.0.0-beta3, y ninguno tiene pantalla de ajustes.</li>
<li><strong>No deberías usar plugins canonical en webs en producción:</strong> Como cualquier plugin de este tipo su misión es terminar en el núcleo de WordPress y, aunque te corroa la impaciencia, no deberías usarlos como si fuesen plugins normales, nunca, ni estos ni ningún otro.</li>
<li><strong>Necesitas la API REST abierta a visitantes anónimos:</strong> Así es como se recogen los datos de cada visita. El propio plugin trae un aviso en Salud del sitio que te avisa si la tiene bloqueada, así que no te vas a quedar a ciegas. Si usas Vigilante con el modo de protección de la API REST más restrictivo, revisa que no le esté cerrando el paso a este plugin en concreto, o nunca vas a ver ninguna optimización aplicada sin saber por qué.</li>
<li><strong>No optimiza nada para ti como administrador:</strong> Hace falta que sean visitantes normales, así que no esperes ver cambios nada más activarlo, necesitas que pase tráfico real primero, para móvil y para escritorio.</li>
</ul>
<h2>¿Hago algo ya?</h2>
<p>No hay una respuesta única, depende de cuánto te guste ir por delante y de cuánto tiempo le quieras dedicar, pero sobre todo teniendo en cuenta que <strong>si pruebas este tipo de plugins debe ser únicamente como experimentació</strong>n.</p>
<p>Si no te importa que algo esté en beta y tienes tráfico suficiente para que se llenen de datos las visitas en pocos días, con todas las precauciones, instala <a href="https://wordpress.org/plugins/optimization-detective/" target="_blank" rel="nofollow noopener">Optimization Detective</a> y <a href="https://wordpress.org/plugins/image-prioritizer/" target="_blank" rel="nofollow noopener">Image Prioritizer</a>, revisa el código fuente de tu web a los pocos días y compara.</p>
<p>Si prefieres no depender de tráfico acumulado ni de tener la API REST abierta a cualquiera, y quieres algo que ya lleva tiempo funcionando sin sorpresas <strong>hay plugins que sí puedes usar ya para optimizar WordPress</strong>.</p>
<h3>¿De qué plugin estás hablando?</h3>
<p>Sabes que hay muchos plugins de optimización, pero <strong>yo solo uso uno gratuito, <a href="https://dietpress.dev/es/" target="_blank" rel="ugc noopener">DietPress</a></strong>, y este ya pone <code>fetchpriority="low"</code> a todas las imágenes menos la primera, sin mirar visitas ni dispositivos, <strong>una regla fija que sigue siendo mejor que lo que hace el núcleo por su cuenta con el resto de imágenes de la página, que es no hacer nada</strong>.</p>
<p>Pero esa regla fija y la lógica de Image Prioritizer, que decide con visitas reales por punto de ruptura, no siempre van a estar de acuerdo. Si en el móvil la imagen importante no es la primera del HTML, más habitual de lo que parece con maquetadores y avisos que se cuelan antes del contenido, tu plugin le estaría bajando la prioridad justo a la imagen a la que el otro se la quiere subir.</p>
<p>Lo tengo controlado, <strong>en cuanto Image Prioritizer deje la beta adaptaré DietPress para que no se pisen cuando se incorpore en WordPress</strong>, todavía no sé si apartándose cuando lo detecte o afinando la regla, pero se adapta, eso seguro.</p>
<p>Y si prefieres no tocar nada de esto todavía, tampoco pasa nada. Por el patrón que te contaba antes, es candidato real a acabar en el núcleo tarde o temprano, y cuando lo haga no vas a tener que instalar ni configurar nada, como pasó con la carga especulativa.</p>
<p>Elijas lo que elijas, <strong>tu web no tiene por qué seguir dependiendo de una adivinanza para saber cuál es su imagen más importante</strong>, y eso tarde o temprano juega a tu favor.</p>
<p>Si acabas probando alguno de los dos plugins, cuéntame qué tal te ha ido, aquí abajo en los comentarios tienes hueco.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/image-prioritizer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Seguridad WordPress para empresas y agencias</title>
		<link>https://ayudawp.com/seguridad-wordpress-empresas-agencias/</link>
					<comments>https://ayudawp.com/seguridad-wordpress-empresas-agencias/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Mon, 20 Jul 2026 06:28:08 +0000</pubDate>
				<category><![CDATA[Seguridad WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Experto]]></category>
		<category><![CDATA[Vigilante]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159941</guid>

					<description><![CDATA[WordPress mueve más del 40 % de todas las webs del mundo y cualquier empresa que lo use es un objetivo por pura probabilidad estadística, sea cual sea su tamaño.]]></description>
										<content:encoded><![CDATA[<p><strong>WordPress mueve más del 40 % de todas las webs del mundo y cualquier empresa que lo use es un objetivo por pura probabilidad</strong> estadística, sea cual sea su tamaño.</p>
<p>Usar el software más extendido del planeta significa compartir también sus vulnerabilidades conocidas con la mitad de tus competidores.</p>
<p>Y esto no es solo un problema técnico, pues <strong>una brecha que exponga datos de clientes activa obligaciones legales</strong> concretas (en España, informar a la Agencia Española de Protección de Datos en un plazo de 72 horas), además de los <strong>costes de reputación y de recuperación</strong> del propio incidente.</p>
<p>Esta guía está organizada teniendo en cuenta <strong>por donde entran los distintos posibles ataques, que son cuatro grandes puertas</strong>, y en cada una encontrarás cómo entra el ataque, qué lo cierra (con soluciones gratuitas siempre que existen, que es casi siempre) y cómo comprobar que la puerta quedó cerrada.</p>
<p>Después encontrarás tres bloques transversales de distinta afectación, como son los riesgos propios de vender con WooCommerce, lo que te exige la ley aunque nadie te ataque, y el protocolo si ya han entrado.</p>
<p>Dicho todo esto, empezamos.</p>
<h2>Puerta 1 – Las extensiones: por donde entra la inmensa mayoría de los ataques</h2>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-159963" src="https://ayudawp.com/wp-content/uploads/2026/07/seguridad-empresas-puerta-1-extensiones.jpg" alt="" width="1200" height="670"></p>
<p>El ataque típico contra un WordPress de empresa <strong>no lo lanza una persona</strong> contra tu web, <strong>lo lanza un bot contra millones de webs a la vez</strong>. El proceso es siempre parecido:</p>
<ol>
<li>El bot rastrea internet buscando versiones concretas de plugins con vulnerabilidades publicadas.</li>
<li>Identifica la tuya por la huella que deja en el código fuente.</li>
<li>Explota el fallo (para el que suele existir exploit automatizado desde el mismo día del aviso).</li>
<li>Sube un pequeño archivo PHP a la carpeta de <code>uploads</code> que le da control remoto.</li>
<li>Crea un administrador con nombre discreto y empieza a inyectar redirecciones o spam SEO.</li>
</ol>
<p>Tú <strong>no ves nada hasta que Google marca la web como comprometida</strong> o un cliente pregunta por qué al hacer clic en tu enlace acaba en una tienda de medicamentos que no es la tuya. Entre la infección y el descubrimiento pasan normalmente semanas.</p>
<p>Los números explican por qué esta puerta es la primera, y es que de todas las vulnerabilidades nuevas de WordPress la mayoría son del tipo <a href="https://ayudawp.com/ataques-xss-wordpress/" target="_blank" rel="noopener">XSS</a>, que permite <strong>colar scripts ajenos en el navegador de tus visitantes</strong>.</p>
<p>Muy típico es el caso de los plugins abandonados, que no dejan de funcionar de golpe, siguen activos, y cada mes sin actualizarse acumulan más probabilidades de tener un fallo conocido que ya nadie va a parchear.</p>
<p>Y hay un agravante que es que WordPress.org cierra o retira plugins del repositorio con cierta regularidad por malware o vulnerabilidades sin corregir, y ese cierre no desinstala nada de tu servidor. <strong>El código sigue ahí, ejecutándose, y el aviso no te llega a ningún sitio</strong> salvo que lo busques activamente.</p>
<p>Esto mismo le pasó a un cliente mío con un plugin sencillo, una utilidad para mostrar imágenes del antes y el después, pero con una vulnerabilidad enorme, para la que <a href="https://ayudawp.com/parche-xss-twenty20/" target="_blank" rel="noopener">me tocó preparar un parche</a>, ante el abandono del plugin original.</p>
<p>Qué cierra esta puerta:</p>
<ul>
<li><strong>Una política de actualizaciones por escrito</strong>: gratis y más eficaz que cualquier herramienta, con actualizaciones automáticas para versiones menores y plugins de confianza, prueba en staging para versiones mayores y plugins críticos (pasarela de pago, formularios, membresías), y cobertura semanal fija con copia de seguridad previa para todo lo demás.</li>
<li><strong>Una auditoría periódica de todo lo instalado</strong>: quién mantiene cada plugin y tema, cuándo se actualizó por última vez, si tiene vulnerabilidades conocidas en tu versión (consúltalo gratis en <a href="https://wpscan.com/">WPScan</a> o Patchstack antes de instalar nada nuevo) y qué duplicidades funcionales puedes eliminar.</li>
<li><strong>Tolerancia cero con lo <a href="https://ayudawp.com/plugins-temas-nulled-gpl/" target="_blank" rel="noopener">nulled</a> o de procedencia desconocida</strong>, y decisión inmediata sobre cualquier extensión activa sin actualizaciones disponibles porque el desarrollador desapareció o la licencia caducó, pues eso es código congelado y sin parches, una decisión estratégica y no un detalle técnico.</li>
<li><strong>Desinstalar lo que no se usa</strong>, incluidos los temas de repuesto que se quedan «por si acaso», porque un tema desactivado sigue siendo código explotable presente en el servidor.</li>
<li><strong>Vigilancia diaria de los cierres del repositorio:</strong> Esta detección automática es, hoy por hoy, casi exclusiva de <a href="https://vigilante.works/es/" target="_blank" rel="noopener">Vigilante</a>, que consulta la API de wordpress.org cada día por cada plugin instalado, activo o no, y avisa con fecha y motivo si alguno ha sido cerrado o retirado.</li>
<li><strong>Un cortafuegos de aplicación como red de contención</strong>, activo desde el primer día aunque sea con la configuración por defecto, con esto bloqueas los patrones de explotación más comunes y la ejecución de PHP en la carpeta de <code>uploads</code>, de modo que frena el ataque incluso cuando el plugin vulnerable siga instalado.</li>
<li><strong>Ponérselo más difícil al escaneo automatizado</strong>: ocultar la versión de WordPress del código fuente, los feeds y las URL de scripts, y eliminar los <code>readme.html</code> y <code>license.txt</code> de la raíz, que la revelan a cualquiera.</li>
<li><strong>Si el tema es a medida</strong>, comprobar que usa tema hijo (un padre modificado directamente pierde los cambios en la próxima actualización) y que está claro quién paga y renueva cada licencia, además, documenta esa revisión con un informe como el que genera la <a href="https://herramientas.ayudawp.com/theme-audit/">auditoría de temas</a>, te da la referencia para la siguiente.</li>
</ul>
<p>Cómo comprobar que está cerrada:</p>
<ul>
<li>Abre el código fuente de tu portada y busca <code>generator</code> y <code>ver=</code>: si aparece tu versión exacta de WordPress, sigue visible.</li>
<li>Sube un archivo PHP de prueba a la carpeta <code>uploads</code> por el medio que uses habitualmente e intenta ejecutarlo desde el navegador, debería devolver un error, no ejecutarse.</li>
<li>Fecha de la última auditoría de extensiones y número de plugins desinstalados en ella: si la respuesta es «nunca» y «cero», ahí tienes el primer hueco.</li>
<li>Comprueba que tu escáner de integridad tiene programada una exploración automática y cuándo fue la última.</li>
</ul>
<h2>Puerta 2 – Las personas y sus credenciales</h2>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-159964" src="https://ayudawp.com/wp-content/uploads/2026/07/seguridad-empresas-puerta-1-credenciales.jpg" alt="" width="1200" height="670"></p>
<p>La segunda puerta <strong>ni siquiera necesita una vulnerabilidad</strong> y es que WordPress regala por defecto la lista de nombres de usuario, puesto que su misma API REST responde en <code>tudominio.com/wp-json/wp/v2/users</code> a cualquiera que pregunte, y las URL del tipo <code>?author=1</code>, <code>?author=2</code> redirigen al archivo público de cada autor.</p>
<p>Con esa lista y las colecciones de contraseñas filtradas que circulan por internet, un bot solo tiene que probar combinaciones en tu formulario de acceso, y si <code>XML-RPC</code> está activo puede probar cientos por petición gracias a su método <code>system.multicall</code>.</p>
<p>La otra variante ni siquiera requiere bots. Es el típico caso de la agencia de hace dos años que conserva un acceso de administrador, la cuenta compartida entre tres personas, el ex-compañero al que nadie dio de baja. <strong>El error humano, no un ataque brillante, es la causa más habitual de una brecha</strong>.</p>
<p>Qué cierra esta puerta:</p>
<ul>
<li><strong>Identificación en dos pasos (2FA) obligatoria</strong> para todos los perfiles de editor para arriba, con aplicación de verificación (<code>TOTP</code>) o código por email, exigible por perfil desde tu plugin de seguridad.</li>
<li><strong>Mínimas capacidades con los perfiles por defecto</strong> (administrador, editor, autor, colaborador, suscriptor), creando un perfil a medida antes que subir a nadie a administrador por comodidad.</li>
<li><strong>Caducidad de contraseñas con historial</strong> que impida reutilizar las últimas, sobre todo en administradores, y límite de sesiones simultáneas por usuario si trabajas con externos que entran y salen de proyectos.</li>
<li><strong>Cierre de la enumeración y del XML-RPC</strong> desde tu plugin de seguridad <a href="https://ayudawp.com/enumeracion-usuarios/" target="_blank" rel="noopener">o con código</a>, y URL de acceso personalizada en lugar de <code>/wp-login.php</code>, que elimina la mayoría del tráfico automatizado contra el formulario.</li>
<li><strong>Un gestor de contraseñas</strong> con espacios compartidos por equipos (Bitwarden, por ejemplo, tiene versión gratuita para empezar y planes de equipo económicos), que acaba con las contraseñas en hojas de cálculo y en hilos de correo.</li>
<li><strong>Una lista de bajas</strong> para cuando alguien deja la empresa o termina un proyecto, donde reflejar quién tiene/tenía acceso a WordPress, panel del hosting, registrador del dominio, CDN, Search Console y cualquier servicio conectado. Un usuario por persona, con nombre real, o esta lista será imposible de aplicar.</li>
<li><strong>Un registro de auditoría</strong> que capture accesos, cambios de usuarios y activación de plugins, filtrable y exportable. Esto es lo que convierte «alguien tocó algo» en «este usuario hizo esto a esta hora».</li>
<li><strong>Formación básica del equipo</strong>: no reutilizar contraseñas, desconfiar de enlaces y adjuntos inesperados, saber a quién avisar ante algo raro, es gratis, y más rentable que cualquier herramienta.</li>
</ul>
<p>Cómo comprobar que está cerrada:</p>
<ul>
<li>Visita por tu cuenta <code>dominio.com/wp-json/wp/v2/users</code> y <code>dominio.com/?author=1</code>: ninguna de las dos debería revelar nombres de usuario.</li>
<li>Cuenta cuántos administradores hay y asegúrate, uno a uno, que de verdad lo necesitan.</li>
<li>Busca cuentas sin acceso en los últimos seis meses y accesos de proyectos ya cerrados.</li>
<li>Haz el simulacro de baja: si una persona concreta se fuera mañana, ¿cuántos servicios habría que tocar y tienes la lista?</li>
</ul>
<h2>Puerta 3 – El alojamiento y el servidor</h2>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-159965" src="https://ayudawp.com/wp-content/uploads/2026/07/seguridad-empresas-puerta-1-servidor.jpg" alt="" width="1200" height="670"></p>
<p>La tercera puerta está fuera de WordPress. Aquí hablamos de que, por ejemplo, una <strong>versión de PHP al final de su vida útil</strong> deja de recibir parches de seguridad aunque todo lo demás esté al día.</p>
<p>Muy típico es también utilizar un <strong>hosting compartido sin aislamiento entre cuentas</strong>, lo que convierte el ataque al vecino en un ataque a tu web.</p>
<p>Otro caso habitual es un listado de directorios abierto, lo que permite a cualquiera pasearse por <code>/wp-content/uploads/</code> y descargar lo que encuentre, y lo mismo pasa con <strong>permisos de archivo demasiado generosos</strong>, que dejan que un proceso comprometido escriba en <code>wp-config.php</code> o <code>.htaccess</code>, los dos archivos donde una sola línea inyectada sobrevive incluso a reinstalar WordPress.</p>
<p>Y hay un problema más en esta puerta, la disponibilidad, porque una caída también es un incidente y cuesta dinero. Según los cálculos que hice para una conferencia que di en GoDigital de Valencia en 2025, <strong>un e-commerce pequeño pierde entre 50 y 200 € por minuto caído, una web corporativa entre 20 y 50 contactos comerciales por hora, y un restaurante sin sistema de reservas entre 500 y 1.500 € por noche.</strong></p>
<p>El día que tu web salga en televisión o una campaña funcione de verdad, la diferencia entre un hosting que escala y uno que se cae es facturación directa.</p>
<p>Qué cierra esta puerta:</p>
<ul>
<li><strong>Un hosting que cumpla los mínimos exigibles</strong>: HTTP/2 o HTTP/3, versiones de PHP y MySQL o MariaDB actualizadas y cambiables por ti sin tiques de soporte, configuración de seguridad específica para WordPress, aislamiento real de cuentas incluso en planes compartidos, soporte técnico especializado en WordPress, recuperación automática ante caídas y capacidad de absorber picos de tráfico. Si el tuyo no los cumple cambiar de hosting es la medida de seguridad más rentable de esta sección.</li>
<li><strong>Tres constantes en <code>wp-config.php</code></strong> (primer bloque de código más abajo): desactivan el editor de archivos, fuerzan HTTPS en el escritorio y evitan que los errores de PHP se muestren a los visitantes.</li>
<li><strong>HTTPS en todo el sitio con HSTS</strong> (segundo bloque de código de abajo), para que el navegador ni siquiera intente la conexión sin cifrar la próxima vez.</li>
<li><strong>El resto de cabeceras de seguridad</strong> (Content Security Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy), que puedes generar listas para Apache, Nginx o PHP con este <a href="https://herramientas.ayudawp.com/security-headers/">generador de cabeceras</a> gratuito.</li>
<li><strong>Permisos de archivo correctos</strong>: <code>644</code> para archivos, <code>755</code> para directorios, y <code>440</code> o <code>400</code> para <code>wp-config.php</code> si el hosting lo permite sin romper nada, además de <code>Options -Indexes</code> en el <code>.htaccess</code> para cerrar el listado de directorios.</li>
<li><strong>Un <a href="https://ayudawp.com/tag/security-txt/" target="_blank" rel="noopener"><code>security.txt</code></a></strong> en <code>/.well-known/</code> siguiendo el estándar RFC 9116, para que un investigador que encuentre un fallo sepa cómo avisarte de forma responsable en vez de publicarlo.</li>
<li><strong>Vigilancia de integridad de <code>wp-config.php</code> y <code>.htaccess</code></strong>: tu plugin de seguridad debería guardar una copia de referencia con suma de verificación y avisarte con un <code>diff</code> línea a línea si algo cambia sin que hayas sido tú.</li>
<li><strong>Copias de seguridad verificadas y fuera del servidor</strong>: restaura una de prueba en un entorno aparte antes de necesitarla en serio, porque una copia alojada en la misma máquina que protege no vale nada el día que esa máquina falle.</li>
<li><strong>Monitorización de disponibilidad externa</strong>, para enterarte tú antes que tus clientes: servicios gratuitos como UptimeRobot comprueban la web cada cinco minutos y avisan por correo en cuanto deja de responder.</li>
</ul>
<pre>// Desactivar el editor nativo de plugins y temas
define( 'DISALLOW_FILE_EDIT', true );
 
// Forzar HTTPS en wp-admin
define( 'FORCE_SSL_ADMIN', true );
 
// Nunca mostrar errores a visitantes, solo registrarlos
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_DISPLAY', false );</pre>
<pre>&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
&lt;/IfModule&gt;
 
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"</pre>
<p>El reparto de responsabilidad con tu hosting conviene confirmarlo por escrito, porque la letra pequeña cambia mucho de un proveedor a otro:</p>
<table>
<thead>
<tr>
<th>Área de seguridad</th>
<th>Qué suele cubrir un buen hosting gestionado</th>
<th>Qué te corresponde a ti</th>
</tr>
</thead>
<tbody>
<tr>
<td>Parches del servidor y del sistema operativo</td>
<td>Sí, casi siempre</td>
<td>Nada, es su trabajo</td>
</tr>
<tr>
<td>Certificado SSL/TLS</td>
<td>Sí, la mayoría lo emite gratis hoy</td>
<td>Forzar HTTPS en todo el sitio y en el admin</td>
</tr>
<tr>
<td>Mitigación de DDoS a nivel de red</td>
<td>Depende mucho del hosting; mejor en los gestionados serios</td>
<td>Limitar peticiones a nivel de aplicación, cortafuegos, 2FA</td>
</tr>
<tr>
<td>Copias de seguridad</td>
<td>Suele venir incluida, pero revisa la retención real</td>
<td>Comprobar que restauran de verdad, backups propios antes de cambios grandes</td>
</tr>
<tr>
<td>Escáner de malware e integridad de archivos</td>
<td>Raro que venga de serie, salvo hostings premium</td>
<td>Escáner activo, revisión de plugins cerrados o abandonados</td>
</tr>
<tr>
<td>Actualizaciones de plugins y temas</td>
<td>Casi nunca, salvo que lo actives tú expresamente</td>
<td>Mantenerlos al día, probar en un entorno de pruebas antes</td>
</tr>
</tbody>
</table>
<p>Cómo comprobar que está cerrada:</p>
<ul>
<li>Pasa un análisis externo de cabeceras y exposición: el <a href="https://herramientas.ayudawp.com/security-check/">análisis de seguridad</a> hace más de 30 comprobaciones gratis y al instante, sin instalar nada.</li>
<li>Pregunta a tu hosting, por escrito, qué versión de PHP ejecutas y hasta cuándo recibe parches de seguridad.</li>
<li>Restaura un backup de prueba en un entorno aparte al menos una vez por semestre y anota cuánto tardaste y si todo se restauró perfecto.</li>
<li>Recuerda la última caída: ¿te avisó tu monitorización o te avisó un cliente?</li>
</ul>
<h2>Puerta 4 – El perímetro: dominio, correo y proveedores</h2>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-159966" src="https://ayudawp.com/wp-content/uploads/2026/07/seguridad-empresas-puerta-1-perimetro.jpg" alt="" width="1200" height="670"></p>
<p>La cuenta del registrador del dominio sin identificación en dos pasos es <strong>el secuestro perfecto</strong> pues quien la controle cambia las DNS y se lleva tu web, tu correo y tu marca a otro servidor, con tu WordPress intacto y perfectamente asegurado en el hosting de siempre.</p>
<p><strong>El correo del dominio es la variante silenciosa</strong> ya que WordPress y WooCommerce envían correos transaccionales a diario, y un dominio sin DMARC puede ser suplantado por cualquiera para hacer phishing a tus propios clientes con tu remitente y tu marca, sin tocar un solo archivo tuyo.</p>
<p>Los proveedores externos (la agencia, el desarrollador puntual, el servicio conectado por API) son accesos más que habituales que rara vez están inventariados.</p>
<p>Qué cierra esta puerta:</p>
<ul>
<li><strong>2FA y bloqueo de transferencia en el registrador del dominio</strong>, hoy mismo: es la cuenta más valiosa de toda tu infraestructura y suele ser la menos protegida.</li>
<li><strong>Inventario de quién controla qué</strong>: dominio, zonas DNS, correo y cada servicio conectado, con un responsable con nombre por fila. Vale una hoja de cálculo, lo que no vale es que la respuesta sea «creo que lo llevaba el informático anterior».</li>
<li><strong>SPF, DKIM y DMARC en el dominio:</strong> el SPF declara qué servidores pueden enviar correo en tu nombre, el DKIM firma cada mensaje (lo genera tu proveedor de correo desde su panel, no es un registro que puedas copiar de una guía) y el DMARC dicta qué hacer con lo que no pase esas comprobaciones. Empieza con el DMARC en modo observación y endurece cuando los informes vengan limpios; tienes los registros de ejemplo más abajo.</li>
<li><strong>Registro de licencias con titular y fecha de renovación</strong> de cada tema y plugin de pago: una licencia que caduca sin que nadie lo sepa es código congelado, y eso te devuelve directo a la puerta 1.</li>
<li><strong>Acceso de proveedores por escrito</strong>: qué puede tocar cada uno, con qué cuenta y hasta cuándo, revocable el día que termina el proyecto. Esto además conecta con el contrato de encargo de tratamiento del bloque legal.</li>
</ul>
<p>Registros de ejemplo, adaptando dominio y proveedor de correo a los tuyos:</p>
<pre>; SPF: declara quien puede enviar correo por ti
; (el include depende de tu proveedor: este es el de Google Workspace)
tudominio.com.  TXT  "v=spf1 include:_spf.google.com ~all"
 
; DMARC, fase 1: solo observar, nada se bloquea todavia
; (recibiras informes de quien envia correo usando tu dominio)
_dmarc.tudominio.com.  TXT  "v=DMARC1; p=none; rua=mailto:dmarc@tudominio.com"
 
; DMARC, fase final tras unas semanas de informes limpios
; (p=quarantine como paso intermedio si prefieres endurecer poco a poco)
_dmarc.tudominio.com.  TXT  "v=DMARC1; p=reject; rua=mailto:dmarc@tudominio.com"</pre>
<p>Cómo comprobar que está cerrada:</p>
<ul>
<li>Consulta tu registro DMARC con cualquier comprobador gratuito (MXToolbox o dmarcian, por ejemplo): si no existe es que tu dominio es suplantable desde ayer.</li>
<li>Entra en la cuenta del registrador y verifica dos cosas: que pide segundo factor y que el bloqueo de transferencia está activo.</li>
<li>Abre el inventario de accesos y licencias: si no existe, esa es la tarea urgente de esta semana.</li>
</ul>
<h2>Tiendas online con WordPress – Riesgos específicos de WooCommerce</h2>
<p>El ataque más frecuente contra un WooCommerce pequeño no busca robarte, busca usarte. Me refiero a <a href="https://ayudawp.com/ataque-carding/" target="_blank" rel="noopener"><strong>bots que prueban tarjetas robadas en tu pasarela de pago</strong> (lo que se conoce como card testing)</a> haciendo cientos de micropedidos que a ti te generan comisiones por transacción fallida, disputas y, si se acumulan, la suspensión de la cuenta en la pasarela.</p>
<p>La segunda variante es el <strong>registro masivo de cuentas falsas</strong>, que ensucia tu base de clientes y prepara fraudes posteriores.</p>
<p>Y la tercera no es un ataque sino una acumulación. Cada pedido guarda datos personales, y una base con años de pedidos completos es superficie expuesta el día de una brecha y responsabilidad directa ante el RGPD.</p>
<p>Qué lo cierra, todo gratis:</p>
<ul>
<li><strong>Verificación antibots en el pago y el registro</strong>: Cloudflare Turnstile es gratuito y menos molesto que un captcha clásico, y la mayoría de plugins de formularios y de seguridad lo integran.</li>
<li><strong>Límite de intentos de pago por IP y por sesión</strong>, desde el cortafuegos de tu plugin de seguridad o desde la propia pasarela, que suele incluir reglas antifraude configurables sin coste.</li>
<li><strong>Revisión semanal de patrones de fraude</strong>: rachas de pedidos fallidos de importe mínimo, muchas cuentas nuevas sin compra asociada, picos de registro a horas extrañas.</li>
<li><strong>Retención de datos con caducidad</strong>: WooCommerce trae herramientas de limpieza y anonimizado en «Ajustes → Cuentas y privacidad». Configúralas y deja de acumular pedidos identificables de hace cinco años que ya no necesitas.</li>
</ul>
<p>Cómo comprobar que está cerrada:</p>
<ul>
<li>Consulta en el panel de tu pasarela la proporción de transacciones rechazadas del último mes: si supera con claridad a la de meses anteriores, ya te están usando.</li>
<li>Cuenta las cuentas de cliente creadas en los últimos 30 días sin ningún pedido asociado.</li>
<li>Abre un pedido de hace tres años y mira qué datos personales sigue guardando.</li>
</ul>
<h2>Obligaciones legales y de privacidad siempre aplicables</h2>
<p>Si tu WordPress recoge datos personales de clientes, usuarios registrados o simples visitantes que rellenan un formulario, <strong>estás sujeto al RGPD y a la Ley Orgánica de Protección de Datos, con independencia del tamaño de la empresa</strong>.</p>
<p>El RGPD exige aplicar medidas de seguridad adecuadas al riesgo, así que una brecha de seguridad es casi siempre también una brecha de protección de datos, con plazos y sanciones concretos.</p>
<p><strong>La notificación a la AEPD debe hacerse en un máximo de 72 horas</strong>, con multas de hasta 10 millones de euros o el 2 % de la facturación para las infracciones graves (entre ellas, no notificar a tiempo) y de hasta 20 millones o el 4 % para las más graves.</p>
<p>Las sanciones a autónomos y pymes suelen moverse en varios miles de euros, lejos de los titulares millonarios pero suficientes para hacerte un agujero importante.</p>
<p>Qué hacer:</p>
<ul>
<li><strong>Documenta cualquier incidente de seguridad</strong>, aunque decidas no notificarlo: el RGPD exige registrar internamente el análisis que llevó a esa decisión, precisamente para poder demostrarlo si la AEPD pregunta.</li>
<li><strong>Deja por escrito, en un contrato de encargo de tratamiento</strong>, quién es el responsable y quién el encargado cuando trabajas con una agencia o un servicio externo.</li>
<li><strong>Aplica minimización de datos</strong>: no guardes en formularios ni en la base de datos más datos personales de los estrictamente necesarios, porque cada campo de más es superficie expuesta de más el día que algo falle.</li>
<li><strong>Revisa avisos de cookies y política de privacidad con regularidad</strong>: están entre los motivos más frecuentes de sanción a pequeños negocios, haya habido o no una brecha técnica.</li>
<li><strong>Interioriza el plazo de las 72 horas</strong> antes de que ocurra un incidente, no durante: es la diferencia entre reaccionar con un protocolo decidido o improvisar bajo presión legal además de técnica.</li>
</ul>
<p>Nada de esto sustituye el asesoramiento de un abogado especializado si la empresa maneja datos sensibles o de gran volumen.</p>
<h2>Si ya te han entrado – Protocolo de las primeras horas</h2>
<p>Aun con las cuatro puertas cerradas, un incidente sigue siendo posible, y <strong>cómo se reaccione en las primeras horas determina si se queda en un susto contenido o se convierte en una crisis larga</strong>.</p>
<p>Las señales de que algo va mal serían estas:</p>
<ul>
<li>Contenido, páginas o redirecciones que nadie de tu equipo ha creado.</li>
<li>Picos de tráfico extraños, sobre todo dirigidos al login o al área de administración.</li>
<li>Usuarios, plugins o temas nuevos que no reconoces.</li>
<li>Entradas de registro anómalas: intentos de acceso repetidos, direcciones IP desconocidas, archivos modificados sin explicación.</li>
<li>Avisos del navegador, de Google Search Console o de tu propio hosting marcando el sitio como inseguro o con malware.</li>
</ul>
<p>Si aparece cualquiera de esas señales, el orden es importante:</p>
<ol>
<li><strong>Aísla el sitio:</strong> Activa el modo mantenimiento o restringe el acceso público mientras investigas, y si tu plugin de seguridad incluye un modo de emergencia con desafío para visitantes, es el momento de activarlo. El objetivo es frenar el daño sin perder lo que necesitarás analizar después.</li>
<li><strong>Comunica con transparencia</strong>: en paralelo a la parte técnica, a quien pueda verse afectado. Tener el mensaje redactado de antemano evita improvisar bajo presión; en <a href="https://ayudawp.com/presentaciones/godigital/">esta recopilación de recursos gratuitos</a> tienes plantillas de comunicación de crisis, una lista de comprobaciones de acción inmediata y la calculadora de coste de caída con la que salen las cifras de la puerta 3 que te contaba antes.</li>
<li><strong>Conserva una copia del estado comprometido</strong> antes de tocar nada, útil tanto para el análisis técnico como para una eventual denuncia o parte al seguro.</li>
<li><strong>Restaura desde la copia de seguridad limpia más reciente</strong>, verificada y anterior al momento de la brecha.</li>
<li><strong>Cambia todas las credenciales</strong>: contraseñas de todos los usuarios, no solo del administrador, además de las claves de la base de datos, las de API de servicios conectados y las de acceso al hosting y al registrador.</li>
<li><strong>Ejecuta un escaneo completo de malware e integridad de archivos</strong> para confirmar que no queda ningún resto: puertas traseras, archivos añadidos o código inyectado que la restauración no haya eliminado.</li>
<li><strong>Identifica y corrige la causa raíz</strong> (el plugin desactualizado, la contraseña débil, el permiso mal configurado) antes de volver a publicar, o el ataque se repetirá en cuanto el sitio vuelva a estar visible.</li>
<li><strong>Evalúa la obligación de notificar</strong> a la AEPD y a los afectados si hay datos personales comprometidos, dentro del plazo de 72 horas.</li>
</ol>
<p>Si la gestión del incidente supera la capacidad del equipo, o si el sitio maneja datos sensibles o pagos, merece la pena contar con <a href="https://servicios.ayudawp.com/">apoyo externo especializado en recuperación de webs hackeadas</a>, sea el mío, el de Sucuri como referencia internacional de pago o el equipo de seguridad de tu propio hosting si lo tiene, porque el tiempo que se ahorra evitando errores en caliente suele compensar el coste del servicio.</p>
<h2>Con qué aplicarlo – Plugins y servicios recomendados</h2>
<p>A lo largo de la guía he escrito varias veces «tu plugin de seguridad» sin concretar cuál, y toca hacerlo. Las opciones serias del mercado gratuito son Vigilante, Wordfence, Kadence Security y SG Security, que comparé función a función en <a href="https://ayudawp.com/plugins-seguridad-gratis/">este análisis de plugins de seguridad</a>.</p>
<p>Vigilante es mío y lo uso en mis webs y en las de mis clientes, así que ya conoces el sesgo y puedes descontarlo, aunque cualquiera de los otros cumple razonablemente si se configura bien y se revisa a conciencia.</p>
<p>Además, te recomiendo llevar un registro de todo consentimiento que se haga en tu web, y como para esta necesidad no había nada suficientemente completo creé estos plugins, que como todos están disponibles gratis en WordPress.org o tu instalador de plugins:</p>
<ul>
<li><a href="https://es.wordpress.org/plugins/terms-conditions-consent-log/" target="_blank" rel="noopener">Registro de consentimientos de términos y condiciones</a>: para llevar un registro legal de todos los consentimientos que pides en tu web, totalmente integrado con los ajustes de privacidad de WordPress.</li>
<li><a href="https://es.wordpress.org/plugins/eu-withdrawal-compliance/" target="_blank" rel="noopener">Cumplimiento del derecho de desistimiento de la UE</a>: todo lo que necesitas, con tienda o sin ella, para registrar y cumplir con el derecho a desistimiento.</li>
</ul>
<p>La otra decisión es quién aplica todo esto, si alguien de dentro o un servicio externo. Si decides delegarlo, sea en una agencia de confianza, en el plan de cuidado de algunos hostings gestionados o en un <a href="https://mantenimiento.ayudawp.com/">servicio de mantenimiento especializado</a> como el que ofrezco yo mismo, exige que cubra como mínimo:</p>
<ul>
<li>La política de actualizaciones de la puerta 1, con prueba en staging y copia previa.</li>
<li>Copias de seguridad verificadas, con restauración de prueba periódica y almacenadas fuera del servidor.</li>
<li>Monitorización de disponibilidad e integridad con avisos, no solo un informe mensual.</li>
<li>Revisión periódica de accesos, usuarios y extensiones instaladas.</li>
<li>Protocolo de incidentes por escrito, con tiempos de respuesta comprometidos.</li>
</ul>
<p>Con esa lista delante puedes evaluar cualquier presupuesto, incluido el mío. Un servicio que no restaura copias de prueba ni revisa accesos no está manteniendo tu web por mucho que actualice plugins.</p>
<h2>Plan de arranque – Por dónde empezar</h2>
<p>Si no tienes ninguna pieza de esta guía montada todavía, no intentes cerrarlo todo el mismo día. Este orden da más protección por minuto invertido:</p>
<ol>
<li>Activa <strong>2FA</strong> en WordPress para administradores y editores, y en la cuenta del registrador del dominio.</li>
<li><strong>Fuerza contraseñas</strong> largas con caducidad, <strong>elimina usuarios</strong> del tipo admin o test, y pon en marcha el gestor de contraseñas de equipo.</li>
<li>Cierra la <strong>enumeración de usuarios</strong>, cambia la <strong>URL de acceso</strong> y <strong>desactiva XML-RPC</strong> si no lo usas.</li>
<li>Activa <strong>cortafuegos y escáner de integridad</strong>, aunque sea con la configuración por defecto del primer día.</li>
<li>Audita plugins y temas, desinstala lo que sobre y deja por escrito la política de actualizaciones.</li>
<li><strong>Fuerza HTTPS</strong> en todo el sitio, revisa <strong>permisos de archivo</strong> y publica un <code>security.txt</code>.</li>
<li>Restaura un backup de prueba y saca las copias del servidor.</li>
<li>Publica <strong>DMARC</strong> en modo observación y comprueba tu <strong>SPF</strong>.</li>
<li>Verifica que tu <strong>hosting</strong> cumple los mínimos de la puerta 3 y activa la monitorización externa.</li>
<li>Documenta el <strong>protocolo de brechas</strong> (con las 72 horas de la AEPD dentro), prepara la plantilla de comunicación y forma al equipo en lo básico.</li>
</ol>
<p>Y una advertencia final, nada de esta lista es tarea para realizar una sola vez. Agenda las revisiones (trimestral para accesos y extensiones, semestral para restaurar un backup de prueba) y trata la seguridad como lo que es, mantenimiento continuo y no un proyecto con fecha de fin.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/seguridad-wordpress-empresas-agencias/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>¿Debo bloquear a los bots de IA que rastrean WordPress? Cómo se hace y qué afecta al SEO, AEO y a la visibilidad en IAs</title>
		<link>https://ayudawp.com/bloquear-bots-ia/</link>
					<comments>https://ayudawp.com/bloquear-bots-ia/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Thu, 16 Jul 2026 06:28:07 +0000</pubDate>
				<category><![CDATA[IA + WordPress]]></category>
		<category><![CDATA[SEO / AEO / GEO / AIO]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[Principiante]]></category>
		<category><![CDATA[VigIA]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159840</guid>

					<description><![CDATA[La pregunta que más me hacéis los que tenéis VigIA instalado no es «¿cómo bloqueo a las IA?», es la de fondo: «¿me conviene bloquearlas o no?»]]></description>
										<content:encoded><![CDATA[<p>La pregunta que más me hacéis los que tenéis <a href="https://es.wordpress.org/plugins/vigia/">VigIA</a> instalado no es «<strong>¿cómo bloqueo a las IA?</strong>», es la de fondo: <strong>«¿me conviene bloquearlas o no?»</strong>.</p>
<p>O sea, que <strong>si le cierro el paso a los rastreadores de inteligencia artificial</strong> que me entran en la web,<strong> ¿me estoy protegiendo o  pegando un tiro en el pie con el SEO y con mi visibilidad en las propias IA?</strong></p>
<p>Es una pregunta de las buenas, y casi todo el mundo la responde mal por dos motivos.</p>
<p>El primero es porque <strong>confunde declarar con bloquear</strong>, que no es lo mismo, una cosa es pedirle al bot que no lo haga y otra impedírselo de verdad, y luego está el hecho de que se decide a la brava, sin pararse a pensar qué le cuesta eso al posicionamiento.</p>
<p>Vamos a ponerlo en orden, con datos, y en mi opinión (y experiencia) son cuatro pasos:</p>
<ol>
<li><strong>Analizar</strong> qué puedes hacer y cómo se aplica cada cosa</li>
<li><strong>Saber</strong> (realmente) a qué hacen caso las IA y a qué no.</li>
<li>Lo más importante, <strong>razonar</strong> si a ti te conviene para el SEO y en qué casos.</li>
<li>Y al final, con toda la información en la mano, <strong>decidir</strong> qué haces con tu web.</li>
</ol>
<p>Vamos a verlo con calma.</p>
<h2>Ah ¿pero se puede bloquear a las IAs?</h2>
<p>Antes de decidir conviene saber qué tienes disponible, porque es más de lo que crees y no todo hace lo mismo. Y hay una línea que lo separa todo, porque <strong>unas acciones declaran tu voluntad (solo surten efecto si el bot decide respetarlas) y otras bloquean de verdad (impiden el acceso, lo respete o no)</strong>.</p>
<p>Con esa idea clara esto es lo que hay.</p>
<h3>Señales declarativas (piden, no obligan)</h3>
<p>¿En serio hace falta que recuerde esto? Ah ¿que sí?, pues nada, uy perdón …</p>
<ul>
<li><strong>El <code>Disallow</code> del <code>robots.txt</code>:</strong> Le dices a un bot, por su nombre, que no rastree tu web o ciertas partes. Aquí dentro entra también el <code>Google-Extended</code>, que no es más que un <code>Disallow</code> para el token con el que Google controla el entrenamiento de Gemini.</li>
<li><strong>El <code>noai</code> y el <code>noimageai</code>:</strong> Dos etiquetas en la cabecera de tu web que declaran «no me uses para entrenar, ni el texto ni las imágenes».</li>
<li><strong>Las Content Signals:</strong> Una técnica distinta y más fina, que va en el <code>robots.txt</code> y que en vez de bloquear a un bot separa <em>para qué</em> autorizas tu contenido y para qué no, y que además puede llevar respaldo legal. La vemos aparte, que tiene lo suyo.</li>
</ul>
<h3>Bloqueo real y efectivo (impide de verdad)</h3>
<p>Aquí quería llegar yo…</p>
<ul>
<li><strong>El 403.</strong> Le devuelves al bot un «prohibido» desde PHP, desde el <code>.htaccess</code> o desde un firewall, y no ve absolutamente nada. Esto no pide, esto impide.</li>
</ul>
<h3>Espera que hay más</h3>
<p>Y dos caminos más que no son ni bloquear ni dejar pasar, y que mucha gente ni se plantea:</p>
<ul>
<li><strong>Cobrar por el acceso</strong>, con la cabecera <code>402</code> y el protocolo <code>x402</code>.</li>
<li><strong>Adelantarte</strong>, asegurándote de que, cuando te compartan con una IA, tu web vaya siempre como fuente.</li>
</ul>
<p>¿Le damos ya?, que esto era solo la lista, la chicha de cada cosa la explico ahora.</p>
<h2>Cómo se bloquea a las IAs</h2>
<p>A las manos en la masa. El «cómo» de cada cosa, con código si te va lo artesano y con plugin si prefieres no tocar nada. Y sí, varios plugins son míos, porque los hice justo para esto, así que perdona el autobombo, pero es que vienen al pelo.</p>
<h3>El <code>Disallow</code> en el <code>robots.txt</code> (con el <code>Google-Extended</code> dentro)</h3>
<p>A mano, en tu <code>robots.txt</code>:</p>
<pre>User-agent: GPTBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: Google-Extended
Disallow: /</pre>
<p>Fíjate en que el <code>Google-Extended</code> es un <code>Disallow</code> más, solo que especial, porque <strong>bloquearlo evita que Google te use para entrenar Gemini sin sacarte de las búsquedas</strong>, sigues apareciendo igual.</p>
<p>Lo anterior, por supuesto, es solo un ejemplo, <a href="https://ayudawp.com/bloquear-bots-inteligencia-artificial/" target="_blank" rel="noopener">aquí tienes una lista bastante más completa de bots de IA a los que hacer <code>Disallow</code></a> (o no)</p>
<p>Si no te quieres pelear con el fichero, tanto mi plugin <a href="https://es.wordpress.org/plugins/native-aeo-pack/">Visibility</a> como <a href="https://es.wordpress.org/plugins/vigia/">VigIA</a> te añaden el <code>Disallow</code> a los principales bots de IA <strong>con un par de clics</strong>.</p>
<h3>Las metas <code>noai</code> y el <code>noimageai</code></h3>
<p>En la cabecera de tu web, así:</p>
<pre>&lt;meta name="robots" content="noai, noimageai"&gt;</pre>
<p><strong>Es una declaración de intenciones contra el entrenamiento de las IAs</strong>, nacida en DeviantArt en 2022, que no es un estándar oficial de nada, así que <strong>vale para el bot que quiera respetarla y para nada frente al que no</strong>.</p>
<p>El plugin <a href="https://es.wordpress.org/plugins/ai-content-signals/">AI Content Signals</a> las añade (si quieres) sin tocar código ni complicarte.</p>
<h3>Las Content Signals (y su respaldo legal)</h3>
<p>Las <code>Content Signals</code> también van en el <code>robots.txt</code>, pero en vez de decirle a un bot que no entre, declaran <strong>para qué usos autorizas tu contenido y para cuáles no</strong>, separando tres cosas distintas:</p>
<ul>
<li><code>search</code>: construir un índice de búsqueda y mostrar resultados (enlaces y extractos cortos), sin incluir los resúmenes generados por IA.</li>
<li><code>ai-input</code>: meter tu contenido en modelos de IA en tiempo real, lo que se llama RAG o <em>grounding</em>, las respuestas de búsqueda con IA.</li>
<li><code>ai-train</code>: entrenar o afinar los modelos.</li>
</ul>
<p>Un ejemplo de «buscar sí, entrenar no» quedaría así:</p>
<pre>User-agent: *
Content-Signal: search=yes, ai-train=no</pre>
<p>¿Y dónde está la gracia de verdad? Pues en que <strong>esto no es solo una petición, es una reserva expresa de derechos con base legal</strong>.</p>
<p>El plugin <a href="https://es.wordpress.org/plugins/ai-content-signals/">AI Content Signals</a> que te comenté en el apartado anterior añade además al <code>robots.txt</code> una declaración que ampara esas señales en el artículo 4 de la Directiva europea 2019/790 de derechos de autor, la que <strong>permite a los autores reservarse su contenido frente a la minería de textos y datos</strong>, que es, ni más ni menos, lo que hace el entrenamiento de las IA.</p>
<p>O sea, que ya <strong>no solo le pides al bot que se porte, le recuerdas que hay una ley europea detrás que protege tu contenido</strong>. Te lo conté a fondo en mi artículo sobre las <a href="https://ayudawp.com/content-signals/">Content Signals</a>, por si quieres seguir informándote de esto.</p>
<h3>El bloqueo con 403 por <code>.htaccess</code> o por PHP</h3>
<p>Cuando la declaración no basta toca el <strong>bloqueo de verdad</strong>, cortando por <code>User-agent</code> desde <code>.htaccess</code>:</p>
<pre>RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Bytespider|PerplexityBot|CCBot) [NC]
RewriteRule .* - [F,L]</pre>
<p>O desde PHP, en tu propio plugin o como suelas añadir códigos a tu web:</p>
<pre>function ayudawp_bloquear_bots_ia() {
    $ua = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
    if ( $ua &amp;&amp; preg_match( '#Bytespider|PerplexityBot|CCBot#i', $ua ) ) {
        status_header( 403 );
        exit;
    }
}
add_action( 'init', 'ayudawp_bloquear_bots_ia' );</pre>
<p>Y aquí, de nuevo, <strong>VigIA te lo da hecho</strong>, porque <strong>bloquea de verdad por PHP a los bots que tú elijas, por IP o por <code>User-agent</code></strong>.</p>
<p>Lo mejor de todo es que te da todas las capas, así que puedes probar con el <code>Disallow</code>, y <strong>cuando compruebes que no le hacen ni caso, además de aprender en carne propia, con un clic puedes bloquearlos</strong>, y también ahí comprobar que eso sí funciona (garantizado).</p>
<p>Para lo más bruto y lejos de tu web de todo, un cortafuegos (un WAF, como el de Cloudflare), que es el único que frena hasta a los que maquillan el <code>User-agent</code> o cambian dinámicamente de IP.</p>
<h2>Y en vez de bloquear a las IA ¿puedo cobrarles o alguna otra cosa?</h2>
<p>Pues sí ,es posible, y quizás son las que más interesante de cara al futuro.</p>
<h3>Cobrar por el acceso: 402 y x402</h3>
<p>Existe una cabecera HTTP, la <code>402 Payment Required</code>, que llevaba décadas casi de adorno y que ahora empieza a cobrar sentido, pues en vez de decirle a la IA que no, le dices «<strong>sírvete, pero pagando</strong>».</p>
<p>Sobre esa idea se está montando el protocolo <code>x402</code>, para <strong>que los bots paguen por rastrearte de forma automática</strong>, y Cloudflare ya está levantando su mercado de pago por rastreo.</p>
<p>No es ciencia ficción, te lo he contado en detalle en mis artículos sobre la <a href="https://ayudawp.com/402-payment-required/">cabecera 402</a> y sobre <a href="https://ayudawp.com/x402/">x402</a>, porque es, hoy o mañana, otra opción real para el dueño de <strong>una web que no quiere ni regalar su contenido ni renunciar del todo a las IA</strong>.</p>
<h3>Adelantarte a veces es inevitable, ya puestos que te lleven siempre de fuente</h3>
<p>Esta sería la forma más proactiva de todas, porque en vez de solo defenderte juegas al ataque. La gente va a compartir tu contenido con las IA quieras o no, así que <strong>al menos que lo haga citando tu web como fuente</strong>.</p>
<p>Eso es justo lo que hace el plugin <a href="https://es.wordpress.org/plugins/ai-share-summarize/">AI Share &amp; Summarize</a>, que añade <strong>botones para resumir y compartir tu contenido en ChatGPT, Claude, Perplexity y demás IAs</strong>, y cada vez que un lector los usa, el mensaje que se manda a <strong>la IA lleva tu URL como origen</strong>.</p>
<p>También va un paso más allá y te permite <strong>usar la IA para que los usuarios no abandonen tu web para usar la IA ¿flipas verdad? </strong></p>
<p>Básicamente <a href="https://ayudawp.com/resumenes-ia-integrados/" target="_blank" rel="noopener">puedes ofrecer resúmenes de tu contenido</a> para, a modo de extracto, generado con tu IA favorita, así <strong>les animas a seguir leyendo, sin que dejen de sentir ese calorcito especial que da la IA</strong>.</p>
<p>De paso te da <a href="https://ayudawp.com/ai-share-summarize-analitica-clics/">analítica de esos clics</a>, que no viene nada mal, lo tienes explicado en mi artículo sobre los <a href="https://ayudawp.com/resumenes-ia-integrados/">resúmenes con IA integrados</a>.</p>
<h2>¿A qué hacen caso las IA y a qué no?</h2>
<p>Por resumir, recuerda que <strong>las señales (el <code>Disallow</code>, el <code>noai</code>, las Content Signals) declaran, y solo surten efecto si el bot decide respetarlas, el 403 bloquea de verdad, lo respete o no</strong>.</p>
<p>Los hay que hacen caso, que conste. Sin ir más lejos, esta semana le pedí a mi IA de cabecera (sí, <a href="https://claude.ai/referral/Y0TXzOGBpQ" target="_blank" rel="nofollow noopener">es Claude Code</a>) que me leyera un artículo de <em>ZDNet</em> para recopilar documentarme para los vídeos que hago en YouTube y <strong>me dijo que no podía, que ese dominio estaba vetado en su herramienta ¿mande? </strong></p>
<p>Pues resulta que quien opera estas herramientas mantiene una <strong>lista de webs que no rastrea, casi siempre por motivos legales</strong>, para respetar a editores que han restringido el acceso de las IA o que están directamente en pleitos con ellas.</p>
<p>Y casualmente ZDNet es de Ziff Davis, que <a href="https://www.eweek.com/news/ziff-davis-sues-openai/" target="_blank" rel="nofollow noopener">demandó a OpenAI en abril de 2025</a> justo por usar su contenido para entrenar y para alimentar respuestas, así que encaja como un guante.</p>
<p>No tengo acceso a la lista ni al motivo exacto de cada web, pero la idea es esa, y conviene saberla, que <strong>a veces la IA no te lee porque legalmente no puede</strong>.</p>
<p>El bot más activo de ChatGPT (<code>ChatGPT-User</code>) también se porta razonablemente bien, lee tu <code>robots.txt</code> y para si le dices que no.</p>
<p>El problema son todos los demás.</p>
<p>En agosto de 2025 <a href="https://blog.cloudflare.com/perplexity-is-using-stealth-undeclared-crawlers-to-evade-website-no-crawl-directives/">Cloudflare pilló a Perplexity</a> saltándose las señales a base de cambiar de identidad, rotar direcciones IP y disfrazarse de un navegador normal para colarse en webs que le habían dicho que no. Y yo que tenía en un altar a Perplexity, ¡qué decepción!</p>
<p>Y el <code>Bytespider</code> de ByteDance ignora el <code>robots.txt</code> cuando le da la gana, vamos, siempre. Resumiendo, que <strong>fiarte solo de las señales es fiarte de la buena voluntad de cada bot, uno por uno</strong>, y ya ves que no todos la tienen.</p>
<p>¿Y cómo sabes tú en cuál de los dos grupos está cada bicho que te visita? Aquí es donde VigIA tiene algo que decir, porque trae una herramienta hecha justo para esto: <strong>comprueba si los bots respetan de verdad el <code>Disallow</code> que les has puesto</strong>.</p>
<p>Si pillas a una IA pasando de ti, con el mismo VigIA le aplicas el bloqueo por PHP. Declarar, comprobar y, solo si hace falta, bloquear, todo en el mismo sitio y sin adivinar, con datos reales, que de esto falta mucho <strong>en todo este tema de las IAs, hay mucho iluminado pero los negocios viven/vivimos de realidades</strong> ¿o no?.</p>
<h2>¿Y a ti te conviene bloquear? el SEO y AEO</h2>
<p>Vale, ya sabes qué puedes hacer y a qué hacen caso. Ahora lo que de verdad nos quita el sueño, que es de donde viene la duda de si <strong>conviene bloquear a las IA para el SEO, o nos estamos cerrando una puerta que no deberíamos cerrar.</strong></p>
<p>La pregunta buena no es ¿bloqueo las IA, sí o no?, es más fina, sería algo más como <strong>¿quieres seguir saliendo en los buscadores y en las respuestas de las IA, pero a la vez impedir que usen tu contenido para entrenar sus modelos?</strong></p>
<p>Parece rebuscado, algunos pensarán que imposible, pero no, porque eso, hoy, se puede separar, y ahí está casi toda la chicha, donde podemos poner un poco de orden y control en todo este mejunje.</p>
<p>La clave para entenderlo es que <strong>el AEO y el GEO, eso de posicionarte en las respuestas de la IA, siguen siendo SEO</strong>. No lo digo yo, lo dice <a href="https://developers.google.com/search/docs/fundamentals/ai-optimization-guide">la propia guía de optimización para IA de Google</a>, pues las AI Overviews y el AI Mode se apoyan en su mismo sistema de posicionamiento y calidad de siempre.</p>
<p>O sea, que <strong>las mismas señales que te hacen posicionar son las que hacen que te citen en las respuestas con IA</strong>. Y ahora ata cabos, que si le impides el paso a los bots que recuperan tu contenido para buscar y citar, <strong>dejas de salir en esas respuestas, y el hueco lo ocupa tu competencia</strong>.</p>
<p>Y esto no es una teoría mía, ya hay datos. Alrededor del 80 % de los grandes medios de noticias ya bloquean al menos un bot de entrenamiento, y un 70 % bloquea también los bots que recuperan contenido para citar en las IA.</p>
<p>¿El resultado? Pues varios estudios apuntan a que esos mismos medios <strong>se están quedando fuera de las respuestas de la IA y perdiendo visibilidad</strong> justo por bloquear a la brava. Se protegen de una cosa y se disparan en el pie con la otra, así que <strong>la cosa está en saber qué y cuándo bloquear</strong>.</p>
<h3>Cuándo bloquear SÍ tiene sentido</h3>
<p>Que quede claro que no todo es dejar pasar. Bloquear compensa, y mucho, cuando <strong>proteger tu contenido pesa más que la visibilidad</strong>. Ejemplos de esto:</p>
<ul>
<li><strong>Contenido propietario o sensible</strong>, eso que te diferencia de verdad de la competencia.</li>
<li><strong>Contenido de pago</strong>, para miembros, cursos o zonas privadas.</li>
<li><strong>Datos únicos que son tu negocio</strong>, como los precios o las fichas de una tienda que no quieres que acaben en el buscador de otro.</li>
<li><strong>Sitios con obligaciones de cumplimiento</strong> estrictas.</li>
<li>Y el caso de los <strong>editores que, sencillamente, no quieren regalar su trabajo para entrenar modelos</strong> y prefieren pelear por que les paguen, ahí es donde entra lo del 402 y el x402 de antes.</li>
</ul>
<h3>Cuándo bloquear sería un grave error</h3>
<p>Y al revés, si <strong>tu web vive de que te encuentren y te citen</strong>, impedir el paso a los bots de búsqueda de IA es de las peores ideas que puedes tener.</p>
<p>Hablo de <strong>blogs, webs de empresa, guías, contenido informativo, marca personal</strong>, todo eso que se alimenta de visibilidad y autoridad.</p>
<p>Ahí <strong>cada cita en una IA es un ladrillo más de tu reputación</strong>, y cerrarles el paso es quedarte fuera del escaparate donde ahora busca la gente. Y para que te citen bien, <strong>el contenido tiene que merecer la cita, que es el <a href="https://ayudawp.com/eeat-wordpress/">E-E-A-T</a> de toda la vida</strong>.</p>
<p>Hay un motivo aparte, eso sí, que vale para cualquiera, y me refiero al <strong>coste de rastreo</strong>.</p>
<p>Estos bots rastrean a lo bestia, y según datos de <a href="https://www.cloudflare.com/learning/ai/how-to-block-ai-crawlers/">Cloudflare</a> hay rastreadores de IA que piden decenas de miles de páginas de tu web por cada mísera visita que te devuelven.</p>
<p>Eso es factura de servidor, así que si uno te está reventando el hosting tienes todo el derecho a pararlo aunque el SEO te diga otra cosa.</p>
<p>¿Y surte efecto bloquear? Pues depende de a quién.</p>
<p>Los bots decentes que respetan las señales pararán en cuanto se lo pidas, los que ignoran el <code>robots.txt</code> necesitan el 403. Y a los que se disfrazan, como vimos con Perplexity, ni el bloqueo por <em>user-agent</em> los para del todo, ahí solo un firewall en condiciones les corta el acceso de verdad.</p>
<p><strong>El método tiene que estar adaptado al bot</strong>, no hay una bala de plata.</p>
<h2>La decisión, con todo en la mano</h2>
<p>Con todo esto ya puedes decidir sin agobios, y el orden sensato es este, justo al revés de lo que hace casi todo el mundo:</p>
<ol>
<li><strong>Primero mide:</strong> Con VigIA (o con los <em>logs</em> de tu servidor), mira quién te rastrea, si respeta tus señales y cuánto te cuesta. Sin este paso vas a ciegas.</li>
<li><strong>Clasifica según el bot y según tu contenido:</strong> A los de búsqueda y cita, déjalos pasar si vives de la visibilidad. A los de entrenamiento, ponles la señal. A los que te sangran el servidor o pasan de ti, bloqueo.</li>
<li><strong>Aplica el nivel justo:</strong> Declaración para el que la respeta, bloqueo para el que no. Y valora si, en vez de bloquear, te compensa cobrar o adelantarte con la atribución.</li>
<li><strong>Revisa tu estrategia a menudo:</strong> Que esto cambia a toda velocidad, y el bot que hoy no te aporta nada, mañana puede ser tu principal fuente de visitas.</li>
</ol>
<h2>«Bueno, vale, ¿pero qué hago?»</h2>
<p>Te veo venir, porque es justo donde te quedas después de tragarte todo esto: «vale, Fernando, ya sé cómo decirle a la IA que no me lea, de varias maneras, y sé qué funciona y qué no, pero yo, con mi web, ¿qué hago?».</p>
<p>Pues para ayudarte a poner orden en la decisión, te lo dejo en una tabla, y luego mi consejo.</p>
<table>
<thead>
<tr>
<th>Qué puedes hacer</th>
<th>En qué afecta</th>
<th>Recomendación</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Disallow</code> a bots de <code>training</code> (Visibility, VigIA)</td>
<td>Declarativo. Los que lo respetan dejan de entrenarte, no toca tu SEO</td>
<td>Recomendado. Cuesta cero y no pierdes nada</td>
</tr>
<tr>
<td><code>Disallow</code> a bots de <code>search</code> o de <code>assistant</code> de IA (VigIA, Visibility)</td>
<td>Declarativo. Dejas de salir citado en las respuestas de las IA</td>
<td>Solo si de verdad no quieres visibilidad en IA. En general no deberías bloquearlos</td>
</tr>
<tr>
<td><code>noai</code> y <code>noimageai</code> (AI Content Signals)</td>
<td>Declarativo. Pides no ser usado para entrenar; voluntario</td>
<td>Recomendado para dejar tu postura clara, sin código</td>
</tr>
<tr>
<td>Content Signals + reserva legal UE (AI Content Signals)</td>
<td>Declarativo con base jurídica (Directiva UE 2019/790). Separa <code>search</code>, <code>ai-input</code> y <code>ai-train</code></td>
<td>Recomendado, es la señal más completa y la única con respaldo legal</td>
</tr>
<tr>
<td>Monitorizar y comprobar cumplimiento (VigIA)</td>
<td>Ni declara ni bloquea: te dice quién entra y quién respeta tus señales</td>
<td>Imprescindible. Es lo que te deja decidir con datos y no a ciegas</td>
</tr>
<tr>
<td>Bloqueo con <code>403</code> por <code>.htaccess</code> o PHP (VigIA)</td>
<td>Bloqueo efectivo. Impide el acceso a los bots declarados que ignoran las señales</td>
<td>Para los que te sangran el servidor o pasan de ti. No frena a los que se disfrazan</td>
</tr>
<tr>
<td>Firewall (WAF, Cloudflare, Vigilante)</td>
<td>Bloqueo efectivo, hasta a los que se disfrazan</td>
<td>Lo más robusto. Ojo, bloquear el <code>training</code> puede impedir también a <code>Googlebot</code></td>
</tr>
<tr>
<td>Cobrar por el acceso (<code>402</code> / <code>x402</code>)</td>
<td>Ni bloqueas ni regalas, pones precio al rastreo de la IA</td>
<td>A tener en el radar, es la vía de futuro para monetizar el acceso</td>
</tr>
<tr>
<td>Adelantarte con la atribución (AI Share &amp; Summarize)</td>
<td>No bloquea, cuando te comparten con una IA, eres de fuente y puedes medir</td>
<td>Recomendado. Juegas a favor en vez de solo defenderte</td>
</tr>
</tbody>
</table>
<p>Si miras la tabla entera, la lógica salta sola, pues casi todo lo que de verdad quieres (que no te entrenen) lo consigues con señales que no tocan tu SEO, y el bloqueo efectivo lo guardas para los que ignoran tus normas o solo consumen recursos del servidor.</p>
<p>Lo único que te cuesta visibilidad de verdad es impedir el paso a los bots de búsqueda, así que ese error no lo cometas sin querer.</p>
<h3>Mi consejo, por si te sirve</h3>
<p>Para la web típica, la de contenido, servicios o marca, mi posición es deja pasar a los bots de búsqueda (<code>search</code>) y de cita (<code>assistant</code>), que te interesa muchísimo que las IA te lean y te nombren.</p>
<p>Además, declarar con las Content Signals y el <code>noai</code> que no te entrenen, medir con VigIA quién te respeta, y bloquear de verdad solo a los que ignoran tus normas o te ponen a prueba el hosting.</p>
<p>Además, estoy muy a favor de limitarte solo en defenderte, a ir a por la atribución, que las IA te van a leer igual y más vale que te lleven de fuente.</p>
<p>Si en cambio tu negocio es contenido propietario, de pago o datos únicos, ahí sí, bloquea lo que haga falta y con menos remordimientos, o plantéate cobrar por el acceso.</p>
<p>Porque al final esto va de lo de siempre, de que <strong>hemos pasado de ser dueños de nuestro contenido a andar negociando quién lo lee, para qué y a cambio de qué</strong>.</p>
<p>Tu web es tuya y la decisión también, faltaría más, pero tómala con los datos delante y sabiendo qué es una declaración y qué es un bloqueo efectivo, que es justo lo que casi nadie te cuenta.</p>
<p>Si quieres seguir tirando del hilo, tengo más escrito sobre <a href="https://ayudawp.com/visibilidad-ia/">visibilidad en las IA</a>, sobre el <a href="https://ayudawp.com/llms-txt-llms-full-txt/">llms.txt</a> y sobre <a href="https://ayudawp.com/ai-overviews-google/">cómo posicionar en las AI Overviews de Google</a>, donde seguro que atas algún cabo más.</p>
<p>Y si lo ves de otra manera, o me quieres contar cómo lo llevas en tu web, me tienes ahí abajo, en la sección de comentarios, que para eso están.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/bloquear-bots-ia/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Trucazo rápido para saber dónde y por qué va lento WordPress</title>
		<link>https://ayudawp.com/diagnostico-rapido-pagina-lenta/</link>
					<comments>https://ayudawp.com/diagnostico-rapido-pagina-lenta/#respond</comments>
		
		<dc:creator><![CDATA[Fernando Tellado]]></dc:creator>
		<pubDate>Wed, 15 Jul 2026 06:28:14 +0000</pubDate>
				<category><![CDATA[Programación + WordPress]]></category>
		<category><![CDATA[Tutoriales - Trucos]]></category>
		<category><![CDATA[WordPress.com]]></category>
		<category><![CDATA[WordPress.org]]></category>
		<category><![CDATA[WPO - Optimizar WordPress]]></category>
		<category><![CDATA[Avanzado]]></category>
		<category><![CDATA[Experto]]></category>
		<category><![CDATA[mu-plugins]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Query Monitor]]></category>
		<category><![CDATA[wp-config.php]]></category>
		<guid isPermaLink="false">https://ayudawp.com/?p=159885</guid>

					<description><![CDATA[Si quieres diagnosticar en qué se te van los tiempos de carga de cualquier página aquí tienes un modo rápido, limpio y privado de verlo fase a fase.]]></description>
										<content:encoded><![CDATA[<p>Tu WordPress va lento, abres Query Monitor a ver qué pasa, miras las consultas y… están bien, hay pocas, son rápidas, nada raro, y sin embargo la página tarda un mundo en pintarse.</p>
<p>Pues bien, resulta que ahí tienes el problema delante y no lo estás viendo, porque <strong>el tiempo no siempre se va en la base de datos</strong>.</p>
<p>Que conste, la mayoría de las veces que algo va lento la culpable sí es la base de datos, en eso llevas razón y por eso conviene empezar por ahí con la <a href="https://ayudawp.com/optimizar-consultas-sql/" target="_blank" rel="ugc noopener">guía para optimizar las consultas SQL</a>.</p>
<p>Pero cuando las consultas están limpias y la cosa se sigue arrastrando el tiempo de carga se te está yendo en otro sitio, en PHP puro, en un plugin que hace un bucle a lo bestia, en una llamada a una API externa metida dentro de un hook, en un render que se atasca.</p>
<p>Y no, eso en las consultas no sale.</p>
<p>Para medirlo con detalle existe el comando <code>wp profile</code>, que reparte el tiempo de carga por fases, pero necesita SSH y línea de comandos, y en un alojamiento compartido normal ni lo tienes ni te dejan tocarlo.</p>
<p>Así que aquí va la versión casera, <strong>un mu-plugin que te dice, al final de cada página, cuánto tiempo se ha ido en cada tramo de la carga</strong>. Sin consola, y solo lo ves solo tú.</p>
<h2>Midiendo los tiempos de carga de una página web por fases</h2>
<p>La carga de WordPress no es un bloque, son fases encadenadas, primero se cargan los plugins, luego arranca el tema, después se dispara <code>init</code>, viene la consulta principal y al final el render de la página.</p>
<p>La idea es poner un cronómetro en cada uno de esos pasos para ver en cuál se atasca la cosa.</p>
<p>Crea un archivo, por ejemplo <code>ayudawp-phase-timer.php</code>, y súbelo a la carpeta <code>/wp-content/mu-plugins/</code> (si no existe la creas tú, es una carpeta normal y corriente).</p>
<p><a href="https://ayudawp.com/que-son-los-mu-plugins-de-wordpress/" target="_blank" rel="noopener">Los mu-plugins ya sabrás se ejecutan solos y antes que todo lo demás</a>, que es justo lo que necesitamos para cronometrar desde el arranque.</p>
<p>En fin, que este es el nene:</p>
<pre>&lt;?php
/**
* Plugin Name: Load Phase Timer
* Plugin URI: https://ayudawp.com/
* Description: Solo para admins: muestra los momentos en los que el tiempo real se solapa con el ciclo de carga de WordPress. Herramienta de diagnóstico, eliminar tras su uso.
* Version: 1.0.0
* Author: Fernando Tellado
* Author URI: https://tellado.es
 */

// Evitar el acceso directo
defined( 'ABSPATH' ) || exit;

// Solo se ejecuta cuando se activa explícitamente, para evitar una sobrecarga en el uso habitual
// Activar definiendo AYUDAWP_PHASE_TIMER como true in wp-config.php
if ( ! defined( 'AYUDAWP_PHASE_TIMER' ) || ! AYUDAWP_PHASE_TIMER ) {
	return;
}

// Una marca temporal por cada paso del ciclo
$GLOBALS['ayudawp_phase_marks'] = array();

// Ancla al inicio de la solicitud real, definida por PHP incluso antes de que se cargue WordPress
$GLOBALS['ayudawp_phase_marks']['request_start'] = isset( $_SERVER['REQUEST_TIME_FLOAT'] )
	? (float) $_SERVER['REQUEST_TIME_FLOAT']
	: microtime( true );

// Momento en que este mu-plugin empieza a ejecutarse
$GLOBALS['ayudawp_phase_marks']['muplugins_start'] = microtime( true );

/**
 * Registra el tiempo real de cada paso
 */
function ayudawp_mark_phase( $name ) {
	$GLOBALS['ayudawp_phase_marks'][ $name ] = microtime( true );
}

// Marca temporal de cada paso del ciclo de carga, en orden
add_action( 'muplugins_loaded',  function () { ayudawp_mark_phase( 'muplugins_loaded' ); },  0 );
add_action( 'plugins_loaded',    function () { ayudawp_mark_phase( 'plugins_loaded' ); },    0 );
add_action( 'after_setup_theme', function () { ayudawp_mark_phase( 'after_setup_theme' ); }, 0 );
add_action( 'init',              function () { ayudawp_mark_phase( 'init' ); },              0 );
add_action( 'wp_loaded',         function () { ayudawp_mark_phase( 'wp_loaded' ); },         0 );
add_action( 'template_redirect', function () { ayudawp_mark_phase( 'template_redirect' ); }, 0 );

// Al final de la solicitud muestra el informe (solo admins)
add_action( 'shutdown', 'ayudawp_print_phase_report', PHP_INT_MAX );

/**
 * Genera y muestra el desglose por fases como comentario HTML, solo para admins
 */
function ayudawp_print_phase_report() {

	// Nunca expone tiempos internos a visitantes
	if ( ! function_exists( 'current_user_can' ) || ! current_user_can( 'manage_options' ) ) {
		return;
	}

	ayudawp_mark_phase( 'shutdown' );
	$marks = $GLOBALS['ayudawp_phase_marks'];

	// Etiqueta para humanos =&gt; [ from milestone, to milestone ]. Cadena contigua
	$phases = array(
		'Antes de WordPress (arranque PHP)' =&gt; array( 'request_start', 'muplugins_start' ),
		'Carga de mu-plugins'               =&gt; array( 'muplugins_start', 'muplugins_loaded' ),
		'Carga de plugins'                  =&gt; array( 'muplugins_loaded', 'plugins_loaded' ),
		'Arranque del tema'                 =&gt; array( 'plugins_loaded', 'after_setup_theme' ),
		'Hasta init'                        =&gt; array( 'after_setup_theme', 'init' ),
		'De init a wp_loaded'               =&gt; array( 'init', 'wp_loaded' ),
		'Consulta principal'                =&gt; array( 'wp_loaded', 'template_redirect' ),
		'Render y salida'                   =&gt; array( 'template_redirect', 'shutdown' ),
	);

	$total = ( $marks['shutdown'] - $marks['request_start'] ) * 1000;

	$lines   = array();
	$lines[] = 'AyudaWP Load Phase Timer';
	$lines[] = 'URL: ' . ( isset( $_SERVER['REQUEST_URI'] ) ? esc_html( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : 'n/a' );
	$lines[] = str_repeat( '-', 52 );

	foreach ( $phases as $label =&gt; $pair ) {
		list( $from, $to ) = $pair;

		// Omite fases cuyos pasos no se hayan activado (p.ej. template_redirect en wp-admin)
		if ( ! isset( $marks[ $from ], $marks[ $to ] ) ) {
			continue;
		}

		$ms  = ( $marks[ $to ] - $marks[ $from ] ) * 1000;
		$pct = $total &gt; 0 ? ( $ms / $total ) * 100 : 0;
		$lines[] = sprintf( '%-38s %8.1f ms  %5.1f%%', $label, $ms, $pct );
	}

	$lines[] = str_repeat( '-', 52 );
	$lines[] = sprintf( '%-38s %8.1f ms', 'TOTAL', $total );

	$output = implode( "\n", $lines );

	// Red de seguridad: no dejar que el contenido salga del comentario HTML
	$output = str_replace( '--&gt;', '--&amp;gt;', $output );

	echo "\n&lt;!--\n" . $output . "\n--&gt;\n"; // phpcs:ignore WordPress.Security.EscapeOutput
}
</pre>
<p>Para que no te consuma nada en el día a día, <strong>el cronómetro solo se enciende cuando tú quieres</strong>. Añade esta línea a tu <code>wp-config.php</code> mientras diagnosticas y la quitas al terminar:</p>
<pre>// Activa el temporizador de fase de AyudaWP para medir el tiempo de carga de las páginas
define( 'AYUDAWP_PHASE_TIMER', true );</pre>
<h2>Interpretar el reparto de tiempos</h2>
<p>Abre como administrador la página que va lenta, mira el código fuente (botón derecho, <code>Ver código fuente de la página</code>) y busca al final del todo <strong>un comentario de código con el reparto de tiempos</strong>, verás algo así:</p>
<pre>&lt;!--
AyudaWP Load Phase Timer
URL: /mi-pagina-lentorra/
----------------------------------------------------
Antes de WordPress (arranque PHP) 37.8 ms 23.9%
Carga de mu-plugins 0.1 ms 0.1%
Carga de plugins 17.9 ms 11.3%
Arranque del tema 8.4 ms 5.3%
Hasta init 3.9 ms 2.5%
De init a wp_loaded 18.0 ms 11.4%
Consulta principal 8.1 ms 5.1%
Render y salida 63.8 ms 40.4%
----------------------------------------------------
TOTAL 158.1 ms
--&gt;</pre>
<p><strong>La fase con más milisegundos es donde se te está yendo el tiempo.</strong> A partir de ahí:</p>
<ul>
<li>Si se concentra en <strong>Carga de plugins</strong> o en <strong>Hasta init</strong>, tienes demasiados plugins o alguno hace trabajo pesado al arrancar, así que toca revisar cuáles son y desactivar los que no aporten.</li>
<li>Si el tiempo está en <strong>Consulta principal</strong> y las consultas estaban limpias, mira el bucle principal, las <code>WP_Query</code> mal montadas o los relacionados, y vuelve a esa guía de consultas SQL.</li>
<li>Si el grueso está en <strong>Render y salida</strong>, el problema es de la plantilla, de shortcodes pesados o de scripts, no de la base de datos.</li>
</ul>
<p>Ojo, esto es para direcciones de la parte visible de la web, en el escritorio (<code>wp-admin</code>) algunas fases no aparecen porque no llegan a dispararse, y es lo normal.</p>
<p>Y que quede claro, esto es un primer vistazo y no sustituye a nada. Cuando ya sepas donde se atasca la cosa y quieras al culpable concreto <a href="https://ayudawp.com/query-monitor/" target="_blank" rel="ugc noopener">Query Monitor</a> te atribuye cada consulta, cada llamada HTTP y cada hook al plugin que lo provoca. Y si tienes SSH, <code>wp profile</code> te da todo esto y bastante más.</p>
<p>Una última cosa, que luego todo son sustos, <strong>esto es una herramienta de diagnóstico y no se queda puesta. </strong>Cuando termines quita la línea del <code>wp-config.php</code> o borra directamente el archivo, que un cronómetro corriendo en cada carga, por ligero que sea, no pinta nada en producción.</p>
<p>¿Te ha salido disparada una fase que no te esperabas? Cuéntamelo aquí abajo en los comentarios, que seguro que no eres el único al que le pasa.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ayudawp.com/diagnostico-rapido-pagina-lenta/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>