{"id":17058,"date":"2026-01-27T08:37:12","date_gmt":"2026-01-27T07:37:12","guid":{"rendered":"https:\/\/webhosting.de\/wordpress-browser-caching-fehler-serverboost\/"},"modified":"2026-01-27T08:37:12","modified_gmt":"2026-01-27T07:37:12","slug":"wordpress-browser-caching-error-serverboost","status":"publish","type":"post","link":"https:\/\/webhosting.de\/es\/wordpress-browser-caching-fehler-serverboost\/","title":{"rendered":"WordPress y la cach\u00e9 del navegador - a menudo configurados incorrectamente"},"content":{"rendered":"<p>El almacenamiento en cach\u00e9 del navegador de WordPress a menudo causa respuestas lentas, porque los operadores tienen que <strong>Cabecera cach\u00e9<\/strong> configurado incorrectamente o no controlado en absoluto. Le mostrar\u00e9 c\u00f3mo las t\u00edpicas configuraciones err\u00f3neas devuelven 200 en lugar de 304, por qu\u00e9 faltan los TTL y c\u00f3mo puedo configurar correctamente el almacenamiento en cach\u00e9 en WordPress. <strong>Actuaci\u00f3n<\/strong> recortar.<\/p>\n\n<h2>Puntos centrales<\/h2>\n\n<ul>\n  <li><strong>TTL largo<\/strong> para activos est\u00e1ticos evita peticiones innecesarias.<\/li>\n  <li><strong>Separaci\u00f3n clara<\/strong> de rutas est\u00e1ticas y din\u00e1micas protege admin y login.<\/li>\n  <li><strong>Un sistema<\/strong> no mezcle plug-ins de cach\u00e9 competidores.<\/li>\n  <li><strong>Comprobar cabeceras<\/strong> con DevTools y estado 304.<\/li>\n  <li><strong>Almacenamiento en cach\u00e9 del servidor<\/strong> y la cach\u00e9 del navegador.<\/li>\n<\/ul>\n\n<h2>C\u00f3mo funciona realmente la cach\u00e9 de navegador en WordPress<\/h2>\n\n<p>El navegador almacena los archivos est\u00e1ticos localmente, con lo que se ahorra la necesidad de recargarlos. <strong>Peticiones HTTP<\/strong>. En la segunda visita, lee im\u00e1genes, CSS y JS de la memoria local y s\u00f3lo pide cambios al servidor. Esto reduce la cantidad de datos, los tiempos de respuesta se reducen y el desplazamiento se siente inmediatamente m\u00e1s sensible. <strong>l\u00edquido<\/strong> en. Si no hay instrucciones claras, el navegador se recarga completamente cada vez y el tiempo de interactividad se resiente. Unas cabeceras de control de cach\u00e9 correctamente configuradas permiten validaciones 304, reducen el ancho de banda y la carga sobre PHP y la base de datos. Yo lo utilizo sistem\u00e1ticamente porque los usuarios recurrentes, en particular, son los que m\u00e1s se benefician de la cach\u00e9 persistente.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-caching-problem-8392.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Por qu\u00e9 suele fallar la configuraci\u00f3n<\/h2>\n\n<p>Muchos sitios ofrecen archivos est\u00e1ticos con una longitud rid\u00edculamente corta. <strong>max-age<\/strong>-valores. Algunos plugins sobrescriben los .htaccess de otros y establecen directivas contradictorias. A menudo, el sitio marca incorrectamente las rutas de administraci\u00f3n, lo que provoca que el contenido de \/wp-admin o \/wp-login.php acabe en la cach\u00e9 involuntariamente y que las sesiones colisionen. Tambi\u00e9n compruebo la diferencia entre la primera llamada y la recurrente, ya que esto explica claramente las experiencias reales de los usuarios; la comparaci\u00f3n encaja con esto <a href=\"https:\/\/webhosting.de\/es\/wordpress-caching-comparacion-primera-llamada-velocidad-lenta\/\">Primera llamada frente a llamada de retorno<\/a>. Si sigue utilizando cadenas de consulta sin versionado, crear\u00e1 archivos antiguos en la memoria y se preguntar\u00e1 sobre <strong>obsoleto<\/strong> Estilos.<\/p>\n\n<h2>Configurar correctamente las cabeceras de cach\u00e9 de WP<\/h2>\n\n<p>Controlo la duraci\u00f3n con <strong>Control de la cach\u00e9<\/strong> y Expires, y evito las ETags ambiguas en entornos multiservidor. Para Apache, establezco Expires con valores significativos y defino \u201epublic, max-age\u201c para los activos. Para Nginx, a\u00f1ado directivas add_header y me aseguro de que el HTML tenga tiempos cortos o \u201eno-store\u201c si el contenido es personalizado. Tambi\u00e9n desactivo las cabeceras ETag si los balanceadores de carga o proxies no generan estos valores de forma coherente. De este modo, impongo un comportamiento claro en el navegador y evito <strong>Revalidaciones<\/strong> con cada clic.<\/p>\n\n<pre><code>ExpiresActive On\n  ExpiresByType image\/jpeg \"acceso m\u00e1s 1 a\u00f1o\"\n  ExpiresByType image\/png \"acceso m\u00e1s 1 a\u00f1o\"\n  ExpiresByType text\/css \"acceso m\u00e1s 1 mes\"\n  ExpiresByType application\/javascript \"acceso m\u00e1s 1 mes\"\n\n\n\n  Header set Cache-Control \"public, max-age=31536000\" \"expr=%{CONTENT_TYPE} =~ m#^(image\/|font\/|application\/javascript)#\"\n  Header set Cache-Control \"no-cache, no-store, must-revalidate\" \"expr=%{REQUEST_URI} =~ m#(wp-admin|wp-login.php)#\"\n  ETag de cabecera sin definir<\/code><\/pre>\n\n<pre><code># Nginx\nlocation ~* .(jpg|jpeg|png|gif|ico|webp|avif|css|js|woff2?)$ {\n    add_header Cache-Control \"public, max-age=31536000\";\n}\nlocation ~* \/(wp-admin|wp-login.php)$ {\n    add_header Cache-Control \"no-store\";\n}<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress_caching_meeting_5823.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Directivas ampliadas de control de cach\u00e9 en la vida cotidiana<\/h2>\n\n<p>Adem\u00e1s de \u201emax-age\u201c y \u201eno-store\u201c, las directivas modernas garantizan una estabilidad notable. \u201eimmutable\u201c indica al navegador que un archivo no cambiar\u00e1 mientras el nombre del archivo siga siendo el mismo - ideal para activos versionados. \u201estale-while-revalidate\u201c permite entregar una copia caducada mientras se actualiza en segundo plano. \u201estale-if-error\u201c mantiene una copia lista si el Origen devuelve brevemente errores. \u201es-maxage\u201c est\u00e1 dirigido a proxies\/CDNs y puede tener valores distintos de \u201emax-age\u201c. Tambi\u00e9n importante: \u201epublic\u201c permite el almacenamiento en cach\u00e9 en proxies compartidos; \u201eprivate\u201c est\u00e1 restringido al navegador. \u201eno-cache\u201c no significa \u201eno cachear\u201c, sino \u201ecachear permitido, pero revalidar antes de usar\u201c - una diferencia crucial con \u201eno-store\u201c.<\/p>\n\n<pre><code># Apache 2.4 ejemplo (cach\u00e9 de activos a\u00fan m\u00e1s robusto)\n\n  Conjunto de cabeceras Cache-Control \"public, max-age=31536000, immutable, stale-while-revalidate=86400, stale-if-error=259200\" \"expr=%{REQUEST_URI} =~ m#.(css|js|woff2?|png|jpe?g|webp|avif)$#\"\n  Conjunto de cabeceras Cache-Control \"no-cache, must-revalidate\" \"expr=%{CONTENT_TYPE} =~ m#^text\/html#\"<\/code><\/pre>\n\n<pre><code># Ejemplo Nginx (redirecciones 304\/Include)\nlocation ~* .(css|js|woff2?|png|jpe?g|webp|avif)$ {\n    add_header Cache-Control \"public, max-age=31536000, immutable, stale-while-revalidate=86400, stale-if-error=259200\" siempre;\n}\nlocation ~* .html$ {\n    add_header Cache-Control \"no-cache, must-revalidate\" siempre;\n}<\/code><\/pre>\n\n<h2>Duraciones de cach\u00e9 recomendadas por tipo de archivo<\/h2>\n\n<p>Elijo los horarios en funci\u00f3n de la frecuencia de cambio, no del h\u00e1bito, porque <strong>Activos<\/strong> envejecen de forma muy diferente. Las im\u00e1genes, logotipos e iconos suelen permanecer actualizados durante mucho tiempo, mientras que CSS\/JS reciben iteraciones m\u00e1s frecuentes. Las fuentes web rara vez cambian, pero requieren cabeceras CORS coherentes. El HTML suele servir de contenedor de contenidos din\u00e1micos y, por tanto, puede durar poco o revalidarse s\u00f3lo una vez. Las API deben tener reglas claramente definidas para que los clientes puedan trabajar correctamente con <strong>JSON<\/strong> evitar.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Tipo de fichero<\/th>\n      <th>Recomendaci\u00f3n Cache-Control<\/th>\n      <th>Nota<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Im\u00e1genes (jpg\/png\/webp\/avif\/svg)<\/td>\n      <td>p\u00fablico, max-age=31536000<\/td>\n      <td>Utilizar cach\u00e9 anual con versionado de archivos<\/td>\n    <\/tr>\n    <tr>\n      <td>CSS\/JS<\/td>\n      <td>p\u00fablico, max-age=2592000<\/td>\n      <td>A\u00f1adir la versi\u00f3n al nombre del archivo para las actualizaciones<\/td>\n    <\/tr>\n    <tr>\n      <td>Fuentes (woff\/woff2)<\/td>\n      <td>p\u00fablico, max-age=31536000<\/td>\n      <td>Configurar correctamente Access-Control-Allow-Origin<\/td>\n    <\/tr>\n    <tr>\n      <td>HTML (p\u00e1ginas)<\/td>\n      <td>no-cache, must-revalidate o short max-age<\/td>\n      <td>Mucho cuidado con los contenidos din\u00e1micos<\/td>\n    <\/tr>\n    <tr>\n      <td>API REST (json)<\/td>\n      <td>private, max-age=0, must-revalidate<\/td>\n      <td>Diferenciar seg\u00fan el criterio de valoraci\u00f3n<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Evitar conflictos con plugins<\/h2>\n\n<p>Utilizo como m\u00e1ximo <strong>Plugin de cach\u00e9<\/strong> y compruebe si el alojamiento ya especifica reglas a nivel de servidor. Combinaciones como W3 Total Cache m\u00e1s WP Super Cache suelen crear directivas duplicadas que se anulan entre s\u00ed. WP Rocket ofrece una configuraci\u00f3n r\u00e1pida, pero necesita exclusiones claras para rutas din\u00e1micas y comercio electr\u00f3nico. En cualquier caso, compruebo el .htaccess generado despu\u00e9s de guardarlo para reconocer cabeceras il\u00f3gicas. A continuaci\u00f3n, pruebo las p\u00e1ginas cr\u00edticas, como las de pago, inicio de sesi\u00f3n y cuadros de mando personalizados, para comprobar que son correctas. <strong>C\u00f3mo evitar<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-browser-caching-fehler-9274.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Almacenamiento en cach\u00e9 y cookies: usuarios registrados, WooCommerce, sesiones<\/h2>\n\n<p>El HTML de los usuarios registrados no debe almacenarse en la cach\u00e9 p\u00fablica. WordPress establece cookies como <code>wordpress_logged_in_<\/code>, WooCommerce complementado <code>woocommerce_items_in_cart<\/code>, <code>wp_woocommerce_session_<\/code> y otros. En lugar de la sobre <em>Vary: Cookie<\/em> Para este tipo de solicitudes evito por completo las memorias cach\u00e9. Esto mantiene los procesos de pago estables y las \u00e1reas personalizadas correctas. Tambi\u00e9n utilizo reglas del servidor que establecen cabeceras m\u00e1s restrictivas cuando se reconocen cookies.<\/p>\n\n<pre><code># Apache: Reconocimiento de cookies y configuraci\u00f3n de cabeceras de desv\u00edo\n\n  SetEnvIfNoCase Cookie \"wordpress_logged_in_|woocommerce_items_in_cart|wp_woocommerce_session\" has_session\n  Header set Cache-Control \"private, no-store\" env=has_session<\/code><\/pre>\n\n<pre><code># Nginx: Bypass basado en cookies\nif ($http_cookie ~* \"(wordpress_logged_in|woocommerce_items_in_cart|wp_woocommerce_session)\") {\n    add_header Cache-Control \"private, no-store\" siempre;\n}<\/code><\/pre>\n\n<p>Muchos plugins de cach\u00e9 ofrecen casillas de verificaci\u00f3n para esto (WooCommerce\/Cart\/Exclude checkout). Importante: Nonces (<code>_wpnonce<\/code>) en los formularios y la API Heartbeat generan cambios frecuentes. Me aseguro de que el HTML del frontend con nonces no se almacene permanentemente en cach\u00e9 o funcione mediante \u201eno-cache, must-revalidate\u201c.<\/p>\n\n<h2>Tratamiento espec\u00edfico del HTML: personalizado frente a general<\/h2>\n\n<p>No todas las p\u00e1ginas son iguales. Los art\u00edculos, las p\u00e1ginas de destino y las p\u00e1ginas legales a menudo pueden almacenarse en cach\u00e9 con un TTL corto o revalidarse. Los archivos, las p\u00e1ginas de b\u00fasqueda, los cuadros de mandos, las \u00e1reas de cuentas y los checkouts siguen siendo din\u00e1micos. Si se trata de almacenar p\u00e1ginas en cach\u00e9, yo sigo la siguiente pr\u00e1ctica: s\u00f3lo almacenar en cach\u00e9 HTML p\u00fablico sin cookies, de lo contrario \u201eprivado\u201c o \u201esin almacenamiento\u201c. Si est\u00e1 probando el micro-cach\u00e9 (por ejemplo, 30-60 segundos para p\u00e1ginas muy frecuentadas y no personalizadas), deber\u00eda definir exclusiones estrictas para par\u00e1metros de consulta y sesiones. WordPress cuenta con <code>NO REVISAR P\u00c1GINA<\/code> una constante que las plantillas pueden establecer en p\u00e1ginas complicadas - yo uso esto constantemente para evitar errores.<\/p>\n\n<h2>Combinar la cach\u00e9 del servidor con sensatez<\/h2>\n\n<p>El almacenamiento en cach\u00e9 del navegador termina en el cliente, pero tambi\u00e9n alivio el servidor con cach\u00e9 de p\u00e1gina, objeto y opcode para real <strong>Picos de carga<\/strong>. El almacenamiento en cach\u00e9 de p\u00e1ginas proporciona HTML est\u00e1tico incluso antes de que se inicie PHP. Redis o Memcached reducen las consultas a bases de datos para peticiones repetidas y reducen notablemente el TTFB. OPcache proporciona fragmentos de bytecode PHP precompilados y acorta as\u00ed el tiempo de ejecuci\u00f3n. Al final, lo que cuenta es una conexi\u00f3n limpia entre la cach\u00e9 del servidor y la cach\u00e9 del navegador para que la segunda visita sea m\u00e1s o menos un \u00e9xito. <strong>instant\u00e1nea<\/strong> funciona.<\/p>\n\n<h2>Integraci\u00f3n de CDN sin sorpresas<\/h2>\n\n<p>Las CDN utilizan su propia l\u00f3gica TTL y responden a \u201es-maxage\u201c. Por lo tanto, hago una distinci\u00f3n clara: \u201emax-age\u201c para navegadores, \u201es-maxage\u201c para Edge. Si hay despliegues pendientes, desencadeno una purga selectiva en lugar de destruir globalmente \u201eCache Everything\u201c. Importante: S\u00f3lo cachear HTML en Edge si no hay cookies implicadas. De lo contrario, se crean estados incorrectos porque la cach\u00e9 Edge comparte respuestas personalizadas. Para los activos, establezco TTL largos y conf\u00edo en el versionado de nombres de archivo. Las CDN pueden ignorar las cadenas de consulta, otra raz\u00f3n para mantener las versiones en el nombre de archivo. La normalizaci\u00f3n de las cabeceras (sin valores \u201eVary\u201c superfluos, \u201eContent-Type\u201c coherente) evita que las claves de cach\u00e9 se hinchen.<\/p>\n\n<h2>Paso a paso: instalaci\u00f3n limpia<\/h2>\n\n<p>Empiezo con un plugin y activo la cach\u00e9 del navegador para CSS, JS, im\u00e1genes y fuentes antes de activar el <strong>.htacceso<\/strong> finalizar. A continuaci\u00f3n, establezco un max-age alto para los activos est\u00e1ticos y proporciono HTML con tiempos cortos o reglas no-cache. Desactivo ETags si hay varios servidores implicados y conf\u00edo en Last-Modified plus 304. A continuaci\u00f3n, activo una precarga para que las p\u00e1ginas importantes est\u00e9n disponibles inmediatamente como copias est\u00e1ticas. Por \u00faltimo, compruebo las rutas de la tienda, de inicio de sesi\u00f3n y de administraci\u00f3n para que no se almacene ning\u00fan contenido privado en la carpeta <strong>memoria intermedia<\/strong> tierra.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-caching-office-2974.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Diagn\u00f3sticos pr\u00e1cticos con CLI y comprobaciones de cabecera<\/h2>\n\n<p>Las DevTools son obligatorias, pero yo profundizo con pruebas CLI. A <code>curl -I<\/code> muestra la cabecera sin descarga; con <code>-H<\/code> Simulo condiciones. Por ejemplo, compruebo si las revalidaciones realmente devuelven 304, si la \u201eEdad\u201c aumenta desde un proxy\/CDN y si las cookies desactivan el almacenamiento en cach\u00e9.<\/p>\n\n<pre><code># Mostrar cabecera\ncurl -I https:\/\/example.com\/style.css\n\nSimular la revalidaci\u00f3n de # (If-Modified-Since)\ncurl -I -H \"If-Modified-Since: Tue, 10 Jan 2023 10:00:00 GMT\" https:\/\/example.com\/style.css\n\nPrueba # con cookie (deber\u00eda forzar el bypass)\ncurl -I -H \"Cookie: wordpress_logged_in_=1\" https:\/\/example.com\/<\/code><\/pre>\n\n<p>Me aseguro de que los activos tengan un valor de \u201econtrol de cach\u00e9\u201c largo, idealmente \u201einmutable\u201c. El HTML deber\u00eda tener \u201eno-cache\u201c o un TTL corto. Si sigo obteniendo 200 en lugar de 304, a menudo hay redirecciones en juego que invalidan ETags\/Last-Modified. Adem\u00e1s, \u201eadd_header\u201c en Nginx s\u00f3lo se aplica a las respuestas 200 por defecto - con \u201ealways\u201c tambi\u00e9n configuro las cabeceras para 304 y 301\/302.<\/p>\n\n<h2>Comprobaci\u00f3n y validaci\u00f3n de cabeceras<\/h2>\n\n<p>Abro DevTools, vuelvo a cargar la p\u00e1gina una vez, borro la cach\u00e9 y vuelvo a cargar para obtener 304 contra 304. <strong>200<\/strong> para observar. En el panel de red, compruebo el control de cach\u00e9, la antig\u00fcedad, ETag\/load-modified y los tama\u00f1os de respuesta. Si sigue habiendo visitas directas en lugar de revalidaciones, compruebo si hay conflictos con redirecciones, cookies o cadenas de consulta. Para casos complicados, me ayuda este art\u00edculo sobre trampas con las cabeceras: <a href=\"https:\/\/webhosting.de\/es\/http-cache-headers-sabotear-el-almacenamiento-en-cache-cachefix\/\">Sabotear la cabecera de la cach\u00e9<\/a>. Repito la comprobaci\u00f3n despu\u00e9s de cada actualizaci\u00f3n del plugin porque los cambios en las reglas suelen hacerse de forma silenciosa. <strong>pase<\/strong>.<\/p>\n\n<h2>Versionado, CDN y eliminaci\u00f3n de cach\u00e9<\/h2>\n\n<p>Cuelgo el <strong>Versi\u00f3n<\/strong> a los nombres de archivo (style.23.css en lugar de style.css?ver=23) para que los navegadores conserven largas cach\u00e9s y sigan cargando nuevos contenidos inmediatamente. Una CDN distribuye los archivos est\u00e1ticos de forma global, establece sus propios TTL en los puntos de enlace y acorta dr\u00e1sticamente los RTT. Importante: S\u00f3lo almacene en cach\u00e9 HTML en la CDN si no se requiere personalizaci\u00f3n, de lo contrario se crear\u00e1n estados incorrectos. Durante el despliegue, cambio el n\u00famero de versi\u00f3n autom\u00e1ticamente para que los usuarios nunca se queden atascados con scripts antiguos. As\u00ed es como combino los TTLs duros de los navegadores con los TTLs seguros. <strong>Reventar la cach\u00e9<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-browsercache-setup2093.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Versiones limpias en las compilaciones de WordPress<\/h2>\n\n<p>Lo m\u00e1s fiable es un proceso de compilaci\u00f3n que escriba hashes en los nombres de archivo (p. ej. <code>app.9f3c.css<\/code>). WordPress entonces carga exactamente este archivo - los navegadores pueden mantenerlo durante un a\u00f1o gracias a \u201einmutable\u201c. Como alternativa, si los nombres de los archivos no pueden cambiarse, establezco el n\u00famero de versi\u00f3n din\u00e1micamente a partir de la fecha del archivo. Esto mantiene las cadenas de consulta correctas y fiables.<\/p>\n\n<pre><code>\/\/ functions.php (versionado fallback v\u00eda filemtime)\nadd_action('wp_enqueue_scripts', function () {\n    $css = get_stylesheet_directory() . '\/dist\/style.css';\n    $ver = file_exists($css) ? filemtime($css) : null;\n    wp_enqueue_style('tema', get_stylesheet_directory_uri() . '\/dist\/style.css', [], $ver);\n});<\/code><\/pre>\n\n<p>Importante: Si el nombre del archivo contiene versiones, se puede establecer \u201einmutable\u201c. Si s\u00f3lo utiliza cadenas de consulta, los navegadores deber\u00edan poder revalidar para que las actualizaciones lleguen de forma fiable. Tambi\u00e9n me aseguro de que las herramientas de compilaci\u00f3n limpien los archivos antiguos para que las CDN no almacenen un n\u00famero innecesariamente grande de variantes.<\/p>\n\n<h2>Almacenar en cach\u00e9 y cargar correctamente las fuentes web<\/h2>\n\n<p>Las fuentes web necesitan TTL largos, cabeceras CORS correctas y precarga opcional para que <strong>Saltos de trazado<\/strong> no aparecen. Coloco los archivos woff2 en el mismo dominio o configuro Access-Control-Allow-Origin limpiamente. Adem\u00e1s, defina font-display: swap para que el texto permanezca visible inmediatamente mientras se carga la fuente. Si quieres optimizar el tiempo de carga de tus fuentes, aqu\u00ed encontrar\u00e1s consejos \u00fatiles: <a href=\"https:\/\/webhosting.de\/es\/wordpress-webfonts-optimizacion-del-tiempo-de-carga-serverperf\/\">Cargar fuentes web m\u00e1s r\u00e1pido<\/a>. Con cabeceras de cach\u00e9 limpias y una preconexi\u00f3n a CDNs, acorto notablemente FOUT\/FOIT y aseguro la consistencia de <strong>Presentaci\u00f3n<\/strong>-Resultados.<\/p>\n\n<h2>Ajuste correcto de fuentes, CORS y Vary<\/h2>\n\n<p>Las fuentes de otro origen requieren CORS. Configuro <code>Access-Control-Allow-Origin<\/code> (por ejemplo, a su propio dominio o \u201e*\u201c para verdaderamente p\u00fablico) y evitar un innecesario <code>Variar: Origen<\/code>, que infla las claves de cach\u00e9. Recomendado para fuentes: <code>p\u00fablico, max-age=31536000, inmutable<\/code>. La precarga mejora el First Paint, pero no cambia el TTL - la precarga y el hard caching se complementan. Tampoco olvido que la entrega comprimida (<code>br<\/code>\/<code>gzip<\/code>) a <code>Vary: Accept-Encoding<\/code> es necesario para que los proxies se separen correctamente.<\/p>\n\n<h2>Patrones de error t\u00edpicos y soluciones r\u00e1pidas<\/h2>\n\n<p>Si aparece c\u00f3digo antiguo despu\u00e9s de una actualizaci\u00f3n, el <strong>Versionado<\/strong> en el nombre del archivo. Si el navegador se recarga completamente cada vez, las cabeceras establecen instrucciones contradictorias o los proxies las eliminan por el camino. Si se cancela una compra, es probable que el sitio est\u00e9 almacenando en cach\u00e9 p\u00e1ginas de sesi\u00f3n o respuestas de la API. Si las rutas de administraci\u00f3n se cuelan en la cach\u00e9, faltan exclusiones para wp-admin e inicio de sesi\u00f3n o un plugin est\u00e1 almacenando en cach\u00e9 de forma global. Lo resuelvo desactivando paso a paso, consolidando cabeceras, excluyendo rutas cr\u00edticas y finalmente el efecto con estado 304 <strong>confirmar<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/01\/wordpress-caching-fehler-9834.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Detalles que a menudo se pasan por alto y marcan una gran diferencia<\/h2>\n\n<ul>\n  <li><strong>Nginx add_header<\/strong> no se aplica a 304\/redirects sin \u201esiempre\u201c - entonces faltan las cabeceras de cach\u00e9 para las validaciones. Siempre pongo \u201ealways\u201c.<\/li>\n  <li><strong>Control de caducidad vs. control de cach\u00e9:<\/strong> \u201eCache-Control\u201c tiene prioridad, \u201eExpires\u201c sirve de reserva para los clientes antiguos. Evite la informaci\u00f3n duplicada y contradictoria.<\/li>\n  <li><strong>ETag en configuraciones multiservidor:<\/strong> ETags inconsistentes destruyen 304. Deshabilito ETags o uso validadores d\u00e9biles y conf\u00edo en \u201eLast-Modified\u201c.<\/li>\n  <li><strong>Variar al m\u00ednimo:<\/strong> \u201eVary: Accept-Encoding\u201c es obligatorio para la compresi\u00f3n, \u201eVary: Cookie\u201c hincha las cach\u00e9s de los bordes - mejor evitar las basadas en cookies.<\/li>\n  <li><strong>SVG y tipo MIME:<\/strong> Correcto <code>imagen\/svg+xml<\/code> set, give long TTL and consider inline SVGs for critical icons.<\/li>\n  <li><strong>Evite las cadenas de redireccionamiento:<\/strong> Cada 301\/302 puede perder validadores y forzar 200 - URLs limpias sin cascadas.<\/li>\n  <li><strong>Utilizar la prioridad\/precarga de forma selectiva:<\/strong> <code>fetchpriority=\"alta\"<\/code> o la precarga de activos cr\u00edticos acelera la primera llamada; el almacenamiento en cach\u00e9 es eficaz para los usuarios que regresan.<\/li>\n  <li><strong>Diferenciar REST-API:<\/strong> Los JSON p\u00fablicos, que rara vez cambian, pueden almacenarse brevemente en cach\u00e9; los puntos finales con tokens\/cookies son estrictamente \u201eprivados\u201c.<\/li>\n<\/ul>\n\n<h2>Brevemente resumido<\/h2>\n\n<p>Conf\u00edo en la claridad <strong>Reglas<\/strong>TTLs largos para activos, respuestas HTML cortas o revalidadas, versionado y un \u00fanico plugin de cach\u00e9. A continuaci\u00f3n, combino la cach\u00e9 del navegador con la cach\u00e9 de p\u00e1ginas, objetos y opcodes para reducir la carga del servidor. Compruebo DevTools, busco 304, compruebo cabeceras y elimino conflictos con redirecciones o cookies. Para la prueba pr\u00e1ctica, comparo las mediciones de la primera llamada y de las llamadas repetidas y me centro en las mejoras perceptibles. Si sigues estos pasos, puedes hacer que WordPress alcance un nivel fiable de cach\u00e9 de navegador. <strong>Velocidad<\/strong> y mantiene contentos a los usuarios y a los motores de b\u00fasqueda.<\/p>","protected":false},"excerpt":{"rendered":"<p>WordPress y la cach\u00e9 del navegador a menudo se configuran incorrectamente. Aprende a configurar correctamente las cabeceras de cach\u00e9 de wp para obtener un rendimiento \u00f3ptimo de wordpress.<\/p>","protected":false},"author":1,"featured_media":17051,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[733],"tags":[],"class_list":["post-17058","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"1121","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":null,"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"WordPress Browser Caching","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"17051","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/17058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/comments?post=17058"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/posts\/17058\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media\/17051"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/media?parent=17058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/categories?post=17058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/es\/wp-json\/wp\/v2\/tags?post=17058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}