AdSense y RGPD en WordPress: cómo montar la publicidad sin sustos
Montar publicidad y AdSense en WordPress sin perderte entre código del tema, tiempos de carga y dudas sobre el consentimiento. Una guía práctica, paso a paso.
Quieres publicidad o Google AdSense en tu web de WordPress y quieres un montaje rápido, mantenible y defendible. El camino habitual es pegar un fragmento de AdSense en algún punto del tema y confiar en que aguante. La factura llega más tarde: en la siguiente actualización, en el tiempo de carga y en el asunto del consentimiento. En este artículo verás cómo gobernar los anuncios desde un solo sitio en lugar de repartir código, qué mirar en materia de protección de datos y cómo se ve una configuración limpia paso a paso.
Una aclaración antes de entrar en detalle: esto es una orientación práctica, no asesoría legal. El RGPD se aplica en toda la Unión Europea con el mismo texto, pero la norma que gobierna de verdad las cookies publicitarias viene de la Directiva ePrivacy, y cada Estado miembro escribió su propia versión nacional. Cuando la letra pequeña de tu mercado importe, la respuesta la tiene una persona experta en ese mercado.
Por qué conviene gobernar la publicidad en lugar de repartir código
En cuanto pegas el primer bloque publicitario en un archivo del tema o dentro de una entrada, empieza un pequeño caos. Con la siguiente actualización del tema el código puede haber desaparecido. Si quieres el mismo anuncio en diez sitios, lo mantienes diez veces. Y si quieres saber si una posición rinde algo, no tienes base para responder, porque no estás midiendo nada.
Hay tres motivos para administrar la publicidad en un único punto:
- Mantenimiento: un anuncio, una fuente. Cambias el código una vez y el anuncio se actualiza en todos los lugares donde lo colocaste.
- Rendimiento: los scripts publicitarios suelen ser los elementos más pesados de una página. Cargarlos de forma controlada, con carga diferida, protege tu tiempo de carga y con él tu posicionamiento.
- Derecho: la publicidad, sobre todo la personalizada, toca la protección de datos. Una gestión central facilita mucho servir los anuncios solo tras el consentimiento, en vez de acordarte de ello en cada fragmento por separado.
Ahí entra un gestor de publicidad como Adjet: creas los anuncios como bloques propios, decides de forma centralizada la ubicación y las reglas, y ves el efecto en una estadística local. Se acabó buscar en archivos del tema. Cómo se compara eso con la herramienta más conocida para insertar código lo detallamos en nuestra comparación con Ad Inserter.
Un aviso sobre el nombre, antes de que lo busques en vano en tu escritorio: en el directorio oficial de WordPress la versión gratuita se llama Hafenstudios Ads, no Adjet. La instalas en Plugins, Añadir nuevo, buscando «Hafenstudios Ads», o directamente desde wordpress.org/plugins/hafenstudios-ads/. A principios de septiembre de 2026 la ficha muestra la versión 2.5.0 con al menos 100 instalaciones activas y 14 valoraciones con una media de 5,0; en agosto de 2026 WordPress.org lo incluyó en la lista de plugins destacados.
Qué piden de verdad el RGPD y la LSSI a un anuncio
Los anuncios personalizados, que son los que AdSense sirve por defecto, suelen instalar cookies o leer identificadores similares para reconocer a la persona visitante. En Europa eso exige una decisión activa de esa persona, el consentimiento del que todo el mundo habla. Aquí se apilan dos capas, y confundirlas es el malentendido más frecuente.
El RGPD regula el tratamiento de datos personales y enumera las bases legales posibles. El consentimiento para almacenar o leer algo en el dispositivo viene de la Directiva ePrivacy, que no se aplica directamente y cada Estado tuvo que transponer. En España es el artículo 22.2 de la LSSI, vigilado por la AEPD, que en sus guías ha sido clara: el consentimiento se pide antes de cargar las cookies no esenciales, y rechazar tiene que ser tan fácil como aceptar. En Alemania la norma equivalente es el TDDDG, sucesor del TTDSG. En Francia es el artículo 82 de la Loi Informatique et Libertés, en Italia el artículo 122 del Codice privacy, en los Países Bajos el artículo 11.7a de la Telecommunicatiewet. Leyes distintas, autoridades distintas, el mismo punto de partida: tecnología no esencial solo después del aceptar.
En la práctica eso significa:
- Normalmente necesitas un banner de consentimiento o una plataforma de gestión del consentimiento (CMP) donde la persona visitante pueda aceptar o rechazar. Rechazar tiene que ser tan fácil como aceptar: un clic en el mismo nivel, sin rodeos escondidos por una pantalla de ajustes. Cuál de las herramientas habituales encaja con tu web lo comparamos en el artículo sobre plugins de aviso de cookies para WordPress.
- La publicidad que se apoya en tecnologías sujetas a consentimiento debería cargar solo después de esa aceptación, nunca antes.
- Los anuncios son publicidad y deberían reconocerse como tales. El artículo 20 de la LSSI exige que las comunicaciones comerciales sean claramente identificables, y una etiqueta de publicidad visible es la forma más sencilla de cumplirlo. En Alemania una etiqueta clara se considera buena práctica, y en cada país hay organismos propios que velan por lo mismo. Con los enlaces pagados vale el mismo razonamiento, y lo tratamos en cómo marcar enlaces de afiliado en WordPress.
El punto débil de casi todos los montajes es el momento. Si el script publicitario se carga al abrir la página, muchas veces ya está activo antes de que nadie haya aceptado nada. Por eso el bloqueo por consentimiento, que ata los anuncios a la señal real de aceptación, merece los diez minutos que cuesta activarlo.
Consent Mode v2 y las reglas propias de Google
Desde marzo de 2024 Google espera Consent Mode v2 en sitios que muestran anuncios de Google o miden con etiquetas de Google y reciben visitas del EEE. Técnicamente comunica cuatro señales a las etiquetas: ad_storage, analytics_storage, ad_user_data y ad_personalization. Sin ellas te arriesgas a mediciones incompletas, remarketing más débil y, en el peor caso, restricciones en tu cuenta de Google Ads o AdSense.
Google añade además una regla propia por encima de la ley. A quien muestra anuncios a personas del EEE y del Reino Unido se le pide usar una plataforma de consentimiento de la lista certificada de Google, y el mensaje se configura en Privacy & messaging dentro de la cuenta de AdSense. Consulta esa lista antes de decidirte por un banner, porque cambiar de herramienta de consentimiento después del lanzamiento cuesta bastante más que elegir bien al principio.
Montar AdSense en WordPress paso a paso
Así se aborda una configuración limpia, en siete pasos. Siguen a Adjet, pero el principio vale para cualquier montaje publicitario bien hecho. Los pasos tres a cinco son el trabajo real de protección de datos, y mezclarlos es justo la forma de abrir el hueco del que trata este artículo.
1. Crear el bloque publicitario
Tienes dos caminos. O pegas tu propio código de anuncio, por ejemplo de un anunciante directo, o usas el asistente de AdSense. Para banners que vendes tú mismo lo habitual es un plugin de rotación, y esa vía la repasamos en nuestra comparación con AdRotate. Ahí introduces tu ID de editor y el ID de bloque y obtienes un anuncio adaptable que se ajusta al espacio disponible. De dónde salen esos dos identificadores, y qué hay que hacer antes en la cuenta de AdSense, lo repasamos en Google AdSense en WordPress. Si quieres, puedes cargar además Auto ads de Google, donde es Google quien elige las posiciones. AdSense espera también un archivo ads.txt en la raíz de tu dominio: no tiene nada que ver con el consentimiento, pero forma parte de un montaje completo, y lo repasamos en el artículo sobre configurar ads.txt en WordPress.
2. Elegir ubicación y segmentación
Ahora decides dónde aparece el anuncio. Para la ubicación automática tienes las posiciones habituales: antes o después del contenido, después de un párrafo concreto o después de la primera imagen. Si lo quieres más fino, colocas a mano con un shortcode, un bloque de Gutenberg o un widget:
[adjet_ad id="1"]
Para anuncios rotativos agrupas varios bloques en un grupo que se sirve por ponderación:
[adjet_ad_group name="header"]
Con la segmentación acotas todavía más: solo escritorio, tableta o móvil, solo determinados tipos de contenido, categorías, etiquetas o términos, todo ello también con exclusiones. Así muestras un anuncio móvil únicamente en una categoría y lo dejas fuera de tus páginas de venta.
La parte del consentimiento: tres tareas, tres pasos
Ahora llega la parte que muchos se saltan, y son tres tareas que técnicamente no tienen nada que ver entre sí. Algo tiene que recoger y guardar la decisión de la persona visitante. Esa decisión hay que comunicarla a las etiquetas de Google. Y los anuncios tienen que quedarse retenidos hasta entonces. Un banner por sí solo cubre únicamente la primera tarea. Ahí fallan casi todos los montajes: la persona pulsa rechazar, el banner desaparece satisfecho, y el script publicitario llevaba rato corriendo por detrás.
3. Recoger y guardar la señal de consentimiento
Aquí tienes dos caminos y eliges exactamente uno.
- El banner incluido: Adjet trae una plantilla «Consentimiento de cookies». La creas como bloque y la activas, y a partir de ahí el banner guarda la decisión en la cookie
adjet_consent, con un año de duración ySameSite=Lax. Aceptar y rechazar están uno al lado del otro, como dos botones en el primer nivel; rechazar no se esconde tras un enlace de ajustes. En la versión gratuita es una decisión de todo o nada; repartirla en categorías (necesarias, estadística, marketing, preferencias) con casillas propias pertenece a Pro. - Una CMP externa: ¿ya usas una herramienta de consentimiento? Entonces solo indicas en los ajustes de Adjet el nombre de la cookie que tu herramienta escribe tras la aceptación, y de forma opcional el valor que debe contener. A partir de ahí Adjet comprueba exactamente eso y no muestra banner propio. Si hay un nombre de cookie configurado, esa cookie decide si un anuncio puede cargar, aunque el banner incluido siguiera activo.
Tener los dos a la vez es mala idea. Dos banners que hacen la misma pregunta confunden a quien visita, y acabas documentando dos decisiones que pueden separarse.
4. Comunicar la decisión a Google: Consent Mode v2
A Google una cookie en el dispositivo no le dice nada. Consent Mode v2 trabaja con señales que están en granted o en denied. La versión gratuita envía exactamente estas cuatro:
| Señal | Qué cubre |
|---|---|
ad_storage | Guardar y leer cookies publicitarias en el dispositivo |
ad_user_data | Enviar datos de la persona usuaria a Google con fines publicitarios |
ad_personalization | Publicidad personalizada y remarketing |
analytics_storage | Almacenamiento con fines de medición, por ejemplo Google Analytics |
Hay dos señales más en el estándar, functionality_storage y personalization_storage. Solo las envía Adjet Pro, junto con el reparto del banner en categorías que las asigna a preferencias. En el código de la versión gratuita no aparecen en absoluto.
El orden es donde se cae la mayoría de las implementaciones. Antes de la primera etiqueta de Google tiene que haber un consent default con estas cuatro señales en denied. Solo después puede un consent update comunicar la decisión. Sin ese default las etiquetas disparan desde la carga de la página con acceso completo al almacenamiento, y el Tag Assistant de Google avisa con «consent update called before default». Por eso Adjet imprime el default muy pronto en el <head>, antes de cualquier gtag.js, y vuelve a comunicar de inmediato como update la decisión que ya esté en la cookie. Sin esa repetición, un rechazo duraría exactamente una vista de página, porque una caché de páginas sirve el mismo HTML a todo el mundo y no puede conocer la cookie.
Google distingue además dos modos de funcionamiento, y ahí hay una decisión real:
- Basic: las etiquetas de Google no llegan a cargarse mientras no haya consentimiento. Sin aceptación no fluye nada, y a cambio faltan los datos por completo. Es el camino que toma Adjet con el banner incluido: el cargador de AdSense se retiene y solo se inyecta en la página tras la aceptación.
- Advanced: las etiquetas cargan de inmediato, pero antes del consentimiento envían solo señales sin cookies, con las que Google modela las conversiones que faltan. Más datos aprovechables, pero también una petición a Google antes de que la persona haya decidido. Si eso, sin acceso al almacenamiento, ya cae bajo la norma nacional de ePrivacy es discutido. Lo seguro es que con Basic la pregunta ni se plantea.
Hay un tercer camino que Adjet ofrece como interruptor y que casi ninguna guía menciona: los anuncios no personalizados. Con el ajuste activo, Adjet pone la marca NPA de Google antes del cargador de AdSense mientras no haya consentimiento. Quien visita ve entonces publicidad sin personalización en lugar de un hueco vacío, y las señales de Consent Mode siguen en denied. El interruptor viene apagado de fábrica, y el propio ajuste explica por qué: los anuncios no personalizados también instalan cookies para la limitación de frecuencia, así que en la Unión Europea puede que necesites consentimiento igualmente.
5. Retener de verdad los anuncios
Solo ahora entra el bloqueo. Con el bloqueo activo, Adjet no escribe el código publicitario en la página, sino que lo deja dentro de un elemento template que el navegador no ejecuta. Cuando llega la aceptación, el script del frontend saca el código y lo inserta. Sin aceptación el hueco se queda vacío en sentido literal: dentro no hay ningún script esperando una señal. Con Auto ads, donde Google elige las posiciones y no hay bloque que sirva de ancla, Adjet retiene en su lugar la dirección del cargador y la añade a toda la web tras la decisión.
6. Encender la carga diferida y la etiqueta
Activa la carga diferida para que los anuncios se carguen cuando entran en el área visible. Técnicamente lo hace un IntersectionObserver que observa si el bloque está a punto de verse. Eso ahorra tiempo de carga, sobre todo con un anuncio situado muy abajo. Enciende además la etiqueta opcional de publicidad, para que los anuncios sigan siendo reconocibles como tales.
7. Comprobar el efecto en la estadística
Tras la puesta en marcha miras la estadística local, un gráfico de 30 días en SVG sencillo que muestra impresiones y clics. Los datos se quedan en tu base de datos, no hay llamadas externas a Adjet ni a hafenstudios. Así ves qué posición y qué formato funcionan con tus lectores, y puedes apagar las ubicaciones flojas en vez de adivinar. Para acciones con fecha limitada tienes la planificación de campañas con hora de inicio y fin opcionales. Una cifra que conviene esperar: AdSense informa de Ad requests en su propio panel, y una solicitud que no se llena nunca llega a ser impresión. Los dos paneles no van a coincidir nunca del todo, y es normal.
Comprobar que el bloqueo funciona de verdad
Una casilla marcada en los ajustes no demuestra nada. La prueba está en las herramientas de desarrollo del navegador y lleva menos de diez minutos. Importan dos direcciones: el cargador de AdSense viene de pagead2.googlesyndication.com y un espacio de Google Ad Manager de securepubads.g.doubleclick.net. Por ahí filtras.
- Abre una ventana privada nueva. Si no, estás comprobando contra una decisión que tomaste tú hace semanas. Después pulsa F12 y ve a la pestaña Red.
- Pon el filtro y recarga. Escribe
googlesyndicationen el campo de filtro y carga la página. Antes de cualquier decisión la lista tiene que quedarse vacía. Si ya hay una línea, AdSense carga demasiado pronto, y eso no lo arregla ningún banner por bonito que sea. - Mira las cookies. En la pestaña Aplicación (Chrome) o Almacenamiento (Firefox), antes de decidir solo deberían aparecer entradas de tu propio dominio, por ejemplo la sesión de WordPress. Nada de Google.
- Pulsa rechazar. El filtro de red sigue vacío y la cookie
adjet_consentpasa adenied. - Recarga sin borrar nada. Sigue sin haber nada de Google, y el banner no puede volver a aparecer. Esta prueba la suspenden sorprendentemente muchos montajes: un banner que vuelve a preguntar tras recargar no guardó bien el rechazo.
- Borra las cookies, recarga y acepta. Ahora tiene que aparecer la línea en la pestaña Red,
adjet_consenttiene que estar engrantedy el hueco tiene que llenarse. Si no ocurre, el bloqueo es estanco pero algo más no cuadra. - Contrasta el Consent Mode. Escribe
dataLayeren la consola y despliega las entradas. La primera entrada de consent tiene que ser undefaultcon esas cuatro señales endenied, y elupdatecon tu decisión va después. Si el orden está invertido, el Tag Assistant de Google también lo señala.
?adjet_debug=1. Adjet escribe entonces, en cada posición omitida, el primer motivo por el que ahí no hay nada: tipo de contenido, tipo de página, calendario, número de palabras, consentimiento o dispositivo. Solo lo ves tú, y esa vista nunca entra en una caché de páginas. Te ahorra adivinar si la causa está en el consentimiento o en otra cosa.El banner tiene que poder usarse, no solo ser legal
Un banner de consentimiento se interpone entre quien visita y todo el contenido. Quien no puede manejarlo no llega a la web y, en consecuencia, tampoco puede consentir. Ahí protección de datos y accesibilidad son la misma obra: un consentimiento que solo se puede dar con el ratón y con buena vista no es en la práctica una decisión libre. Cinco cosas que compruebas tú en pocos minutos:
- Teclado: carga la página y pulsa solo el tabulador. ¿Llegas a aceptar y a rechazar, y se activan ambos con Intro o con la barra espaciadora? Eso exige elementos
buttonde verdad, no contenedoresdivcon un clic encima. En el banner incluido de Adjet son botones. - Foco visible: ¿ves dónde estás mientras tabulas? Un
outline: noneeliminado por diseño es el fallo más frecuente en banners por lo demás correctos. - Tapado: con el banner abierto, sigue tabulando hacia dentro de la página. Un banner pegado al borde inferior tapa con gusto justo el elemento que tiene el foco. WCAG 2.2 tiene un criterio propio para eso, el 2.4.11 Focus Not Obscured (Minimum) en nivel AA.
- Contraste: el texto del banner necesita al menos 4,5:1 contra su fondo según el criterio 1.4.3, y el borde de un botón al menos 3:1 según el 1.4.11. El gris claro sobre blanco suspende aquí con regularidad, y de los dos botones suele ser el de rechazar. Chrome muestra el valor de contraste en el propio selector de color.
- Lector de pantalla: el banner necesita un nombre, si no se anuncia como una región sin nombre. La plantilla de Adjet trae para eso
role="dialog"con una etiquetaaria-label.
El punto donde ambas exigencias se juntan es el de antes: rechazar tiene que estar tan a mano como aceptar, un clic en el mismo nivel. Eso es protección de datos y usabilidad a la vez. Por qué un acertijo adicional delante de un formulario provoca el mismo efecto en otro sitio lo cuenta el artículo sobre captchas y accesibilidad.
No perder de vista el rendimiento
Publicidad y tiempo de carga son un equilibrio. Ayudan unas reglas sencillas:
- Menos es más: tres ubicaciones pensadas suelen rendir mejor que ocho que llenan la página y ahuyentan lectores.
- Usar carga diferida: todo lo que queda por debajo de la primera pantalla no tiene que cargar de inmediato.
- Probar posiciones: usa la estadística para quitar anuncios con poco efecto, en lugar de añadir siempre más.
Si ya estás ordenando tu web de WordPress, vale la pena mirar también las URL limpias y las redirecciones. Cómo resolverlo bien lo tienes en el artículo sobre redirecciones 301 en WordPress, porque ahí también se trata de resolver un asunto técnico de forma central y no dispersa.
Gobierna la publicidad en vez de repartir código
Adjet reúne ubicación automática, asistente de AdSense, bloqueo por consentimiento, carga diferida y estadística local en un solo panel, sin llamadas externas. Su propio banner de cookies con Google Consent Mode v2 viene incluido.
Conclusión
Montar publicidad y AdSense en WordPress no es cuestión de código copiado deprisa, sino de control limpio. Si administras los anuncios de forma central, los sirves solo tras el consentimiento, los cargas con retraso y los marcas como publicidad, estás bien situado en lo técnico, en lo legal y en el tiempo de carga. Y como mides lo que funciona, acabas ganando más con menos anuncios. Adjet es de código abierto bajo GPLv2, trae su propio permiso (manage_adjet) y una API REST (adjet/v1), sin entregar tus datos al exterior. Lo que cuesta cada plugin, Adjet incluido, está en nuestra página de precios. Y repetimos la frase que importa: esto es una orientación, no asesoría legal, así que la letra pequeña de tu mercado confírmala con alguien cualificado allí.
Preguntas frecuentes sobre AdSense y publicidad en WordPress
¿Necesito un banner de consentimiento para AdSense en WordPress?
En la Unión Europea, por norma general sí. Los anuncios personalizados como los de AdSense suelen instalar cookies o leer identificadores similares, y eso exige una aceptación activa. Para ello necesitas un banner de consentimiento o una plataforma de gestión del consentimiento donde la persona visitante pueda aceptar o rechazar. La norma concreta sale de la ley nacional de tu mercado, en España el artículo 22.2 de la LSSI, no solo del RGPD. Esto es una orientación, no asesoría legal; ante dudas concretas consulta con una persona experta.
¿Cuándo puede cargarse un anuncio?
La publicidad que se apoya en tecnologías sujetas a consentimiento debería cargar solo después de la aceptación, no ya al abrir la página. Adjet ofrece dos caminos: el banner de consentimiento incluido, que recoge la decisión y la guarda en la cookie adjet_consent, o el bloqueo por cookie de consentimiento, donde indicas el nombre de la cookie de tu herramienta actual y Adjet espera esa señal. En ambos casos el código publicitario está hasta entonces dentro de un elemento template que el navegador no ejecuta, así que el hueco está vacío de verdad. Además, la carga diferida por IntersectionObserver hace que incluso los anuncios aceptados carguen al llegar al área visible.
¿Qué es Google Consent Mode v2 y qué pasa sin él?
Consent Mode v2 es la forma en que Google quiere que se comunique la decisión de la persona visitante a sus propias etiquetas. La versión gratuita comunica cuatro señales en granted o en denied: ad_storage, ad_user_data, ad_personalization y analytics_storage; las dos señales de preferencias, functionality_storage y personalization_storage, solo las envía Adjet Pro. Desde marzo de 2024 Google lo espera para visitas del EEE siempre que haya AdSense, Google Ads o Analytics en funcionamiento. Sin esa comunicación tendrás mediciones incompletas y un remarketing más débil, y en el peor caso restricciones en la cuenta. Lo decisivo es el orden: antes de la primera etiqueta de Google tiene que haber un consent default con todo en denied, y solo después puede un consent update comunicar la decisión.
¿Basta con el banner incluido de Adjet o necesito un plugin de cookies aparte?
Para una web que muestra publicidad y apenas integra otros servicios externos, el banner incluido basta: recoge la decisión, la guarda en la cookie adjet_consent, comunica Google Consent Mode v2 y retiene los anuncios hasta que alguien acepta. En cuanto tengas muchos más servicios sujetos a consentimiento, por ejemplo vídeos incrustados, mapas, widgets de chat y varias herramientas de medición, un plugin de consentimiento especializado es la mejor opción. Entonces indicas su nombre de cookie en los ajustes de Adjet y Adjet espera esa señal, en lugar de mostrar un segundo banner. Tener los dos a la vez es la peor variante.
¿Tengo que marcar los anuncios como publicidad?
Marcarlos es el camino seguro. Los anuncios son publicidad, y el artículo 20 de la LSSI exige que las comunicaciones comerciales sean claramente identificables para el lector. Cómo se vigila eso cambia según el país: en España está la AEPD para las cookies y las autoridades de consumo para la publicidad, en Alemania una etiqueta clara se considera buena práctica. Adjet trae una etiqueta de publicidad opcional que puedes encender sin tocar código, para que quede claro qué contenido está pagado y cuál no.
¿Qué consigue la carga diferida en los anuncios?
La carga diferida hace que un anuncio se cargue solo cuando entra de verdad en la parte visible de la pantalla. Técnicamente lo resuelve un IntersectionObserver que observa si el bloque publicitario está a punto de verse. Eso ahorra tiempo de carga, sobre todo con un anuncio situado más abajo en la página, y cuida también las Core Web Vitals. En Adjet la carga diferida se activa junto al bloqueo por consentimiento, de modo que ambos mecanismos encajan.
¿Adjet es gratis y cómo monto AdSense con él?
Adjet es de código abierto bajo GPLv2. En el directorio oficial de WordPress la versión gratuita figura con el nombre Hafenstudios Ads, así que es el nombre que hay que buscar en Plugins, Añadir nuevo. Creas un anuncio con el asistente de AdSense, introduces tu ID de editor y el ID de bloque y obtienes un anuncio adaptable que se ajusta al espacio; opcionalmente activas además el cargador de Auto ads de Google. La colocación es automática, por ejemplo antes o después del contenido, o manual con un shortcode como [adjet_ad id="1"], un bloque de Gutenberg o un widget. Para automatizar hay una API REST en adjet/v1 y un permiso propio llamado manage_adjet.