Parece que hablas enlish
Las 795 páginas que guardamos de la Agencia Española de Seguridad Alimentaria están programadas para hacer lo mismo nada más cargar: parar el navegador y pedirle un cartel al servidor de la Agencia. A quien entra en español, el servidor le contesta en blanco. A quien pide la página en inglés, o sin decir en qué idioma, le manda un cartel que empieza diciéndole que parece «an enlish speaker person».
- Dominio
- aesan.gob.es
- Guardado
- 31 AGO 2026
- Comprobado en vivo
- 15 SEP 2026
- Citas
- 7 en 2 ficheros guardados
- Lectura
- unos 5 min

Un script es un trozo de programa que va dentro de la página y que el navegador ejecuta al abrirla. Este empieza armando una dirección con dos piezas: la ruta de la página donde estás y una cadena con virgulillas que parece una errata. No lo es. La web está hecha con Magnolia, un gestor de contenidos (el programa con el que se escriben y publican las páginas), y esa cadena es su forma de pedir solo un trozo de una página: aquí, el área modalLocation del pie.
Detrás de esa cadena va un añadido, visualize=true. El 23 de septiembre de 2026 pedimos la misma dirección con él y sin él. Con él, el servidor, que es el ordenador de la Agencia que entrega la web, devuelve el cartel. Sin él, devuelve el trozo tal como va dentro de la página: un hueco vacío y el mismo script que lo rellena. El añadido es lo que hace salir el cartel, y el script lo pide en cada página.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 637 B
- sha256
- 3cdb549b57fb…
| 1 | document. |
| 2 | var contentLinkModalCountry = '/ |
| 3 | const existeCookie = document.cookie.split('; ').some(cookie => cookie. |
| 4 | if (!existeCookie) { |
| 5 | $.ajax({ |
| 6 | type: "GET", |
| 7 | dataType: "html", |
| 8 | url: contentLinkModalCountry, |
| 9 | async: false, |
| 10 | data: {} |
| 11 | |
| 12 | }).done(function(data) { |
| 13 | $(' |
Lo siguiente es una comprobación razonable. El script mira si existe una cookie llamada lang-modal, la nota que un sitio deja guardada en tu navegador para reconocerte la próxima vez, y si la encuentra no pide nada. Con esa nota puesta, el cartel no se vuelve a pedir. Hasta aquí, nada raro. Lo raro está en la forma de pedirlo y en quién pone esa nota, que se cuenta más abajo.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 637 B
- sha256
- 3cdb549b57fb…
| 1 | document. |
| 2 | var contentLinkModalCountry = '/ |
| 3 | const existeCookie = document.cookie.split('; ').some(cookie => cookie. |
| 4 | if (!existeCookie) { |
| 5 | $.ajax({ |
| 6 | type: "GET", |
| 7 | dataType: "html", |
| 8 | url: contentLinkModalCountry, |
| 9 | async: false, |
| 10 | data: {} |
| 11 | |
| 12 | }).done(function(data) { |
| 13 | $(' |
| 14 | }); |
La petición lleva escrito async: false. Traducido: el navegador se para. No pinta, no responde al ratón, no reacciona al teclado; se queda quieto esperando a que el servidor conteste y solo entonces sigue con lo suyo. Los navegadores aceptan todavía esta forma de pedir datos, pero la marcan como desaconsejada en su consola, la ventana de avisos para quien programa, justo por ese parón.
- Copia
- archivo
- Guardado
- 31 ago 2026
- Peso
- 637 B
- sha256
- 3cdb549b57fb…
| 1 | document. |
| 2 | var contentLinkModalCountry = '/ |
| 3 | const existeCookie = document.cookie.split('; ').some(cookie => cookie. |
| 4 | if (!existeCookie) { |
| 5 | $.ajax({ |
| 6 | type: "GET", |
| 7 | dataType: "html", |
| 8 | url: contentLinkModalCountry, |
| 9 | async: false, |
| 10 | data: {} |
| 11 | |
| 12 | }).done(function(data) { |
| 13 | $(' |
| 14 | }); |
| 15 | } |
| 16 | }); |
Lo que tarda el servidor en contestar se puede medir, así que lo medimos. El 15 de septiembre de 2026, desde nuestro servidor, pedimos tres veces la misma dirección: 383, 360 y 363 milisegundos, algo más de un tercio de segundo. Cuánto espera el navegador de cada visitante depende de su conexión, y eso no lo hemos medido. Lo que dice el código es que la espera se repite en cada una de las 795 páginas para quien no tenga la cookie.
Antes de contar qué dice el cartel, lo que no está mal. Esperábamos un servidor que decidiera tu idioma sin mirar, y no lo es. Pedimos la misma dirección diciendo que veníamos en español, en francés y en euskera, y las tres veces contestó seis bytes, lo que ocupa una palabra de seis letras: tres saltos de línea, nada. Con inglés británico o americano contestó el cartel entero, 2.454 bytes.
O sea que la comprobación de idioma existe y funciona. El único caso raro es el de quien no declara idioma: entonces el servidor da por hecho que quiere inglés y le manda el cartel. Un navegador normal siempre dice en qué idioma quiere las páginas, así que quien lo tenga en español no verá el cartel. El 23 de septiembre de 2026 repetimos las seis peticiones y el servidor contestó lo mismo, byte a byte.
Pero no ver el cartel no libra de la espera. Ninguno de los dos scripts que carga la página escribe la cookie lang-modal, y en nuestras peticiones en español del 23 de septiembre ni la página ni la respuesta en blanco la dejaron puesta. Quien entra en español no recibe nada que la ponga, así que su navegador vuelve a parar y a preguntar en cada página que abre, para recibir otra vez tres saltos de línea.
Ahí está el cartel. Arriba, un saludo: «Hello! Where are you visiting us from?». Debajo, la frase que da nombre a esta pieza: «It looks like you're an enlish speaker person». Sobra algo y falta una letra. Sobra person, porque an English speaker ya es una persona. Y falta la ge de English, que la frase siguiente sí escribe bien: «visit the English website».

- Copia
- en vivo
- Leído
- 15 sep 2026
- Peso
- 2,5 kB
- sha256
- b77e6d2f8a22…
| 3 | <div class="language-modal open"> |
| 4 | <div class=" |
| 5 | <p class=" |
| 6 | </div> |
| 7 | <div class=" |
| 8 | <p class="content-text"><p>It looks like you're an enlish speaker person.</p><p>Would you like to visit the English website or continue to actual website?</p></p> |
| 9 | </div> |
| 10 | <div class=" |
| 11 | <div class=" |
| 12 | <a class="aesan-btn aesan-btn--green center" href="/ |
| 13 | <span class=" |
| 14 | </a> |
| 15 | <button class="aesan-btn aesan-btn--white center" onclick='return setSelection();' type="button" aria-label="Continue to actual site"> |
| 16 | <span class=" |
| 17 | </button> |
| 18 | </div> |
| 19 | </div> |
Esa misma frase acaba ofreciendo «continue to actual website», y el botón blanco de debajo dice «Continue to actual site». En inglés, actual es un falso amigo: se escribe como nuestra palabra y significa real o verdadero. Lo que ofrece ese botón, leído por alguien de Londres, es seguir en la web de verdad, como si la otra fuese un decorado. El otro botón, el verde de encima, apunta a la versión inglesa.
El cartel trae además dos descuidos de construcción que se entienden sin saber programar. El texto va dentro de un párrafo que contiene otros dos, y en HTML, el lenguaje en que se escriben las páginas, eso no se puede hacer: el navegador cierra el primero por su cuenta, sin avisar. Y el enlace al sitio en inglés declara dos veces el atributo class, el dato de su etiqueta que dice con qué estilo se pinta; el navegador se queda con el primero y tira el segundo. Ninguno de los dos rompe la página. Solo hacen que no sea la que se escribió.
- Copia
- en vivo
- Leído
- 15 sep 2026
- Peso
- 2,5 kB
- sha256
- b77e6d2f8a22…
| 3 | <div class="language-modal open"> |
| 4 | <div class=" |
| 5 | <p class=" |
| 6 | </div> |
| 7 | <div class=" |
| 8 | <p class="content-text"><p>It looks like you're an enlish speaker person.</p><p>Would you like to visit the English website or continue to actual website?</p></p> |
| 9 | </div> |
| 10 | <div class=" |
| 11 | <div class=" |
| 12 | …class="btn btn-secondary" title="English web"> |
| 13 | <span class=" |
| 14 | </a> |
| 15 | <button class="aesan-btn aesan-btn--white center" onclick='return setSelection();' type="button" aria-label="Continue to actual site"> |
| 16 | <span class=" |
| 17 | </button> |
| 18 | </div> |
| 19 | </div> |
| 20 | <div class=" |
| 21 | |
| 22 | <script> |
| 23 | $(".js-close-filters"). |
Dentro del propio cartel viaja más código. Los dos botones vuelven a llamar al servidor, y las dos veces con async: false: otra parada en seco para avisar de que has elegido país, y otra para avisar de que te quedas. Entre medias, en la rama que lleva a la versión inglesa, un console.log("redirect!!!") con tres signos de admiración: un mensaje de depuración, una nota para quien programa que solo se ve abriendo las herramientas del navegador.
- Copia
- en vivo
- Leído
- 15 sep 2026
- Peso
- 2,5 kB
- sha256
- b77e6d2f8a22…
| 23 | $(".js-close-filters"). |
| 24 | e.preventDefault(); |
| 25 | }); |
| 26 | |
| 27 | var contentLinkModalCountry = '/ |
| 28 | function sendFormModal(urlRedirect) { |
| 29 | $.ajax({ |
| 30 | type: "GET", |
| 31 | dataType: "json", |
| 32 | url: contentLinkModalCountry, |
| 33 | async: false, |
| 34 | data: {"action": "setcountry"6} |
| 35 | }).done(function(data) { |
| 36 | if (data && data.success) { |
| 37 | console.log(" |
| 38 | window.location.href = urlRedirect; |
| 39 | } |
| 40 | }); |
| 41 | return false; |
| 42 | } |
| 43 | |
| 44 | function setSelection() { |
| 45 | $.ajax({ |
| 46 | type: "GET", |
| 47 | dataType: "json", |
| 48 | url: contentLinkModalCountry, |
Quien entra en español espera en cada página un cartel que nunca le llega. Quien lo recibe lee que parece «an enlish speaker person».
- En 795 páginas de aesan.gob.es guardadas el 31 de agosto de 2026 hay un script inline (775 ficheros de programa distintos, porque algunas páginas comparten el suyo) que, si no existe la cookie lang-modal, pide con
jQueryy async: false el áreamodalLocationdel pie, con el parámetro visualize=true, y mete la respuesta en la página. - El 15 de septiembre de 2026 esa dirección contestó 2.454 bytes si la petición no declara idioma o declara inglés británico o americano, y seis bytes si declara español, francés o euskera; el 23 de septiembre de 2026 contestó lo mismo en los seis casos, con la misma huella digital.
- Ese día, pedida sin visualize=true, la misma dirección devolvió el hueco vacío y el script que lo rellena, no el cartel.
- También el 23: la página del caso y la portada, pedidas en español, traían el mismo script; ni ellas ni la respuesta en blanco pusieron la cookie lang-modal, y ninguno de los dos scripts que carga la página la escribe.
- La respuesta contiene, literalmente, «It looks like you're an enlish speaker person», un párrafo dentro de otro párrafo, un enlace con el atributo class dos veces, dos peticiones más con async: false y la línea console.log("redirect!!!").
- Las tres mediciones de tiempo que publicamos son del 15 de septiembre, desde nuestro servidor.
- No decimos que el sitio elija mal el idioma: lo probamos con cinco idiomas declarados y sin ninguno, y la comprobación funciona.
- No decimos que el cartel se le muestre a quien navega en español, porque a esas peticiones el servidor no les devuelve nada.
- No decimos cuánto se para el navegador de un visitante cualquiera: lo medido es lo que tarda el servidor en contestar, desde nuestro servidor y en tres intentos.
- No decimos qué hace el servidor cuando se pulsa uno de los botones del cartel: no los hemos pulsado.
- Y no decimos quién escribió ese texto ni cuándo: no consta en nada que hayamos guardado.
De dónde sale cada cita
Cada trozo de código de esta ficha está en un fichero guardado tal como lo entregó el servidor, con su huella (sha256) y su hora. Las citas entre «» se comprueban por programa contra ese fichero antes de publicar.
- https://aesan.gob.es/seguridad-alimentaria/nuevos-alimentos-y-biotecnologia31 de agosto de 2026, 15:46archivosha256 3cdb549b57fb3b48999c5546453cb794e09d8df3b2dfca87d01a3d82fd0dd677
- https://aesan.gob.es/seguridad-alimentaria/nuevos-alimentos-y-biotecnologia~mgnlArea=footer,modalLocation~?visualize=true15 de septiembre de 2026, 12:27en vivosha256 b77e6d2f8a22f3aa776b67918d68e98583608d32659009a9448c00876df9fd90