Chrome elimina XSLT el 17 de noviembre: cómo auditar tu sitio y reemplazar las transformaciones del navegador
Chrome 158 retira el 17 de noviembre la API XSLTProcessor y la instrucción xml-stylesheet, y Firefox y WebKit siguen la misma ruta. Qué clases de sitios se rompen, la auditoría de tres comprobaciones que añadimos a cada migración y los tres caminos de reemplazo, incluido un puente de emergencia que caduca en agosto de 2027.
El 17 de noviembre de 2026, con la versión 158, Chrome deja de ejecutar XSLT: desaparecen la API JavaScript XSLTProcessor y la instrucción <?xml-stylesheet?> que convierte un XML en una página renderizada, y Firefox y WebKit han anunciado que seguirán la misma ruta. Si tu sitio sirve XML con hoja de estilo o tu JavaScript transforma feeds XML en HTML en el navegador, tienes poco más de un mes. La buena noticia: la auditoría son tres comprobaciones que caben en una tarde, existe un puente de emergencia (una origin trial que caduca el 17 de agosto de 2027) y, en la mayoría de los casos, el reemplazo correcto no es reescribir XSLT en JavaScript: es dejar de transformar en el navegador.
Qué se retira y cuándo
Son dos APIs, no una. La clase XSLTProcessor —cuando tu código llama a new XSLTProcessor() para transformar un XML en el cliente— y la instrucción de procesamiento <?xml-stylesheet type="text/xsl" ...?> en documentos XML de nivel superior —cuando es el propio navegador quien transforma al cargar el documento—. Chrome documenta el calendario completo de retirada:
| Fecha | Versión | Qué cambia |
|---|---|---|
| 28 oct 2025 | Chrome 142 | Mensajes de aviso temprano en consola |
| 2 dic 2025 | Chrome 143 | Deprecación oficial: avisos en consola y en Lighthouse |
| 10 mar 2026 | Chrome 146 | Enterprise policy en vivo para probar el apagado anticipado |
| 25 ago 2026 | Chrome 152 | Origin trial en vivo: permite seguir usando XSLT pasado el 17-nov |
| 22 sep 2026 | Chrome 154 | Los canales Canary, Dev y Beta de webview desactivan XSLT por defecto |
| 17 nov 2026 | Chrome 158 | XSLT deja de funcionar en stable para todos los que no estén en la origin trial o con enterprise policy |
| 17 ago 2027 | Chrome 176 | Terminan origin trial y enterprise policy: XSLT apagado para todos |
No es una decisión de Chromium en solitario. Mozilla tiene un bug de seguimiento abierto para deprecar y retirar XSLT y su posición oficial en la discusión del WHATWG es que retirarlo es "bueno para la salud a largo plazo de la plataforma web y para la seguridad del usuario", señalando que el uso de XSLT es hoy inferior al que tenían las Mutation Events cuando se retiraron —y Flash, que se apagó, se usaba muchísimo más. WebKit, por su parte, ya añadió un aviso de deprecación en consola cada vez que un desarrollador usa una API de XSLT. Y Edge no se queda atrás: publicó la política XSLTEnabled para gestionar la transición y en la versión 147 ya retiró la producción de SVG con XSLT en línea.
El motivo declarado es seguridad. libxslt y libxml2 llevan años en modo mantenimiento y han sido origen repetido de incidentes; Chrome además planea migrar el parseo XML de libxml2 a un parser escrito en Rust. Cuando los tres motores coinciden en que una tecnología tiene que irse, la fecha deja de ser una recomendación.
Qué se rompe de verdad (y qué no)
No todo el mundo usa XSLT, y quien lo usa casi nunca lo sabe: suele venir de una plantilla heredada, de un widget de terceros o de un XML que alguien dejó de tocar hace una década. Estas son las cuatro clases que encontramos al revisar dependencias, en orden de gravedad:
| Caso | Ejemplo real | Qué pasa el 17 de noviembre | Gravedad |
|---|---|---|---|
| XML decorativo | sitemap.xml con hoja de estilo | En el navegador se ve el XML en crudo en vez de la página formateada; los rastreadores leen el XML directamente y no se ven afectados | Baja |
| Render funcional de documentos | Catálogos, directorios o legislación servida como XML + XSL — el sitio del Congreso de EE. UU. sirve sus leyes así | El usuario deja de ver una página y pasa a ver marcado XML o un aviso | Alta |
XSLTProcessor dentro de tu JavaScript | Feeds XML convertidos a HTML en cliente, tablas maestras, generadores de PDF en el navegador | Tu JS lanza excepción y el contenido simplemente no aparece | Alta |
| Aplicaciones y equipos internos | Clientes web de escritorio remoto, paneles de dispositivos de red que sirven XML con XSL | Interfaz inutilizable en Chrome; los foros de soporte de Microsoft ya recogen el aviso "XSLT is being removed" justo al abrir esos clientes | Crítica |
La cuarta fila es la que más sustos va a dar en empresas: hay aplicaciones web internas que nadie ha tocado en años y que dependen de una hoja de estilo para mostrar siquiera su pantalla de login.
La auditoría: tres comprobaciones
Esta es la lista que añadimos al inicio de cualquier revisión de un sitio legacy antes de proponer una migración. No requiere acceso a nada especial.
1. Busca la firma en el código y en los XML que sirves. Un grep cubre el 90% de los casos:
grep -riE "xml-stylesheet|XSLTProcessor" --include="*.js" --include="*.xml" --include="*.xsl" --include="*.html" .
Revisa también los XML que entregas por HTTP —feeds, sitemaps, catálogos— buscando la instrucción <?xml-stylesheet?> en su cabecera.
2. Mira la consola de Chrome. Desde Chrome 143 aparecen avisos de deprecación de XSLT, y Lighthouse los reporta en sus auditorías. Este es el mejor detector de dependencias olvidadas: el aviso aparece aunque el XSLT venga de un widget de terceros que nunca tocaste, porque quien transforma es el navegador, no tu código.
3. Clasifica antes de decidir. No tiene sentido el mismo plan para un sitemap que para el login de una app interna:
| Clase | Cómo se reconoce | Qué hacer antes del 17-nov |
|---|---|---|
| Decorativa | Solo cambia la apariencia de un XML; el contenido se lee igual sin transformar | No hacer nada, o generar el HTML en build si te importa la vista |
| Funcional | Sin la transformación el usuario no recibe una página usable | Mover la transformación al build o al servidor |
| Crítica | Login, panel o flujo interno que no funciona sin XSLT | Plan con fecha: migración real o token de origin trial como puente |
Tres caminos de reemplazo (y un puente)
Una vez clasificado, el camino se elige con dos preguntas: ¿los datos cambian por usuario o por request? ¿Controlas el build?
| Situación | Camino | Cuándo elegirlo |
|---|---|---|
| XML y XSL estables, publicas igual para todos | Transformar en build: el loader convierte XML a JSON o HTML durante la compilación | La mayoría de los sitios; es el camino por defecto en Astro o Next.js |
| El feed cambia y no controlas cuándo se compila | Transformar en el servidor o en un Worker antes de responder | Feeds vivos, datos de terceros, inventarios |
| Solo mapeas campos de un XML pequeño | DOMParser + una capa fina de JavaScript | Cuando la "transformación" en realidad es leer cinco campos |
| No puedes tocarlo a tiempo | Origin trial de deprecación (token por origen) o enterprise policy | Puente hasta el 17 de agosto de 2027, nunca solución final |
Dos matices sobre el puente. El token de la origin trial se pide desde el panel de origin trials de Chrome, se inyecta por origen y funciona hasta Chrome 176 (17 de agosto de 2027); la enterprise policy sirve para entornos gestionados, que es el caso de los equipos internos. Sobre los polyfills: cubren razonablemente XSLTProcessor() cuando lo llama tu JavaScript, pero la instrucción declarativa en documentos de nivel superior es mucho más difícil de simular, y Mozilla lo discute abiertamente en su bug de seguimiento — hay una extensión polyfill en pruebas para Firefox, pero depender de una extensión del usuario no es una estrategia de producción.
Nuestra posición: no portees XSLT a JavaScript
Reescribir a mano cientos de líneas de XSLT —XPath 1.0, plantillas, modos, claves— con DOMParser es donde se atascan casi todos los proyectos de migración: es trabajo de semanas, no de días, y el resultado es código que nadie quiere mantener después. Nuestra regla es distinta. Si el XML y la XSL no cambian por usuario, mueve la transformación al build y guarda el HTML o el JSON ya resuelto. El sitio nuevo no debería saber que alguna vez hubo una transformación en tiempo de ejecución. Solo cuando el dato es vivo y no controlas la compilación tiene sentido transformar en el servidor; solo cuando la "transformación" es un mapeo de campos merece la pena DOMParser. Y el token de la origin trial se pide el día que no quedó otra opción, no el día que empezó el proyecto: es una grúa, y las grúas caducan el 17 de agosto de 2027.
Cómo lo encajamos en cada migración
Cuando sacamos contenido de un CMS legacy —la migración de WordPress a Astro de 2.500 páginas nos costó cinco días extra solo por formatos que ningún parser entendía—, la lista de "qué depende del navegador" ya era parte del diagnóstico. Lo que cambia ahora es la urgencia: antes, una transformación en el navegador era deuda silenciosa; el 17 de noviembre se convierte en una ruptura con fecha.
Por eso la revisión previa incluye el grep de arriba junto a las preguntas que ya hacemos sobre cómo se comporta el contenido sin JavaScript y dónde vive la lógica en una arquitectura en Cloudflare. Y si el sitio legacy tiene que seguir vivo unos meses más mientras migramos —ese fue justamente el caso de nuestro salto a Cloudflare Pages—, el puente de la origin trial compra tiempo, pero solo si lo pides antes del 17 de noviembre.
Antes del 17 de noviembre, en orden
- Corre el grep en el repositorio y en los XML que sirves por HTTP.
- Abre tus páginas con XML en Chrome y lee la consola.
- Clasifica cada hallazgo en decorativo, funcional o crítico.
- Para los funcionales: transformación en build, o en el servidor si el dato es vivo.
- Para los críticos sin tiempo de migración: pide el token de la origin trial esta semana.
Cinco pasos, una tarde de trabajo en la mayoría de los sitios, y la diferencia entre descubrirlo el 17 de noviembre con los usuarios delante o descubrirlo ahora.
Preguntas Frecuentes
¿Qué elimina Chrome exactamente el 17 de noviembre de 2026?
Dos APIs, no una: la clase JavaScript XSLTProcessor, que tu código usa para transformar XML en el cliente, y la instrucción de procesamiento xml-stylesheet en documentos XML de nivel superior, que hace que el propio navegador transforme el XML al cargar la página. A partir de Chrome 158 ninguna de las dos funciona, salvo para participantes en la origin trial de deprecación o con la enterprise policy de Microsoft y Google.
¿Mi sitemap.xml va a dejar de funcionar?
No. El sitemap sigue siendo un XML válido y los rastreadores lo leen sin pasar por XSLT. Lo único que cambia es la vista en el navegador: en vez de la página con la hoja de estilo de Google verás el XML en crudo o un aviso. Es el caso de menor gravedad de todos.
¿Cómo sé en una tarde si mi sitio depende de XSLT?
Tres comprobaciones: un grep de xml-stylesheet y XSLTProcessor en el código y en los XML que sirves; la consola de Chrome actual, que muestra avisos de deprecación desde Chrome 143 aunque el XSLT venga de un widget de terceros que nadie recuerda; y una clasificación de lo que encuentres en decorativo, funcional o crítico antes de decidir el reemplazo.



