{"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-fout-serverboost","status":"publish","type":"post","link":"https:\/\/webhosting.de\/nl\/wordpress-browser-caching-fehler-serverboost\/","title":{"rendered":"WordPress en browser caching - vaak verkeerd geconfigureerd"},"content":{"rendered":"<p>WordPress browser caching veroorzaakt vaak trage reacties, omdat operators <strong>Cache-header<\/strong> verkeerd ingesteld of helemaal niet gecontroleerd. Ik laat je zien hoe typische misconfiguraties 200 retourneren in plaats van 304, waarom TTL's ontbreken en hoe ik caching in WordPress correct kan instellen. <strong>Prestaties<\/strong> trim.<\/p>\n\n<h2>Centrale punten<\/h2>\n\n<ul>\n  <li><strong>Lange TTL<\/strong> voor statische activa voorkomt onnodige verzoeken.<\/li>\n  <li><strong>Duidelijke scheiding<\/strong> van statische en dynamische paden beschermt admin en login.<\/li>\n  <li><strong>E\u00e9n systeem<\/strong> Gebruik geen concurrerende cachingplug-ins door elkaar.<\/li>\n  <li><strong>Headers controleren<\/strong> met DevTools en 304 status.<\/li>\n  <li><strong>Server caching<\/strong> en browsercache.<\/li>\n<\/ul>\n\n<h2>Hoe browser caching in WordPress echt werkt<\/h2>\n\n<p>De browser slaat statische bestanden lokaal op, waardoor ze niet opnieuw hoeven te worden geladen. <strong>HTTP-verzoeken<\/strong>. Bij het tweede bezoek worden afbeeldingen, CSS en JS uit het lokale geheugen gelezen en wordt alleen de server om wijzigingen gevraagd. Dit vermindert de hoeveelheid gegevens, de responstijden worden korter en scrollen voelt meteen responsiever aan. <strong>vloeibaar<\/strong> aan. Als er geen duidelijke instructies zijn, laadt de browser elke keer volledig opnieuw en lijdt de interactieve tijd eronder. Correct ingestelde cache control headers maken 304 validaties mogelijk, verminderen de bandbreedte en verminderen de belasting van PHP en de database. Ik gebruik dit consequent omdat vooral terugkerende gebruikers het meest profiteren van persistent cachen.<\/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>Waarom configuratie vaak mislukt<\/h2>\n\n<p>Veel sites leveren statische bestanden met belachelijk korte <strong>maximumleeftijd<\/strong>-waarden. Sommige plugins overschrijven elkaars .htaccess en stellen tegenstrijdige directives in. De site markeert beheerpaden vaak verkeerd, waardoor inhoud van \/wp-admin of \/wp-login.php onbedoeld in de cache terechtkomt en sessies botsen. Ik controleer ook het verschil tussen de eerste en terugkerende aanroep, omdat dit duidelijk de echte gebruikerservaringen verklaart; de vergelijking past hierbij <a href=\"https:\/\/webhosting.de\/nl\/wordpress-caching-vergelijking-eerste-oproep-trage-snelheid\/\">Eerste oproep vs. terugkerende beller<\/a>. Als je nog steeds query strings gebruikt zonder versiebeheer, zul je oude bestanden in het geheugen aanmaken en je afvragen of <strong>verouderd<\/strong> Stijlen.<\/p>\n\n<h2>WP cache headers juist instellen<\/h2>\n\n<p>Ik regel de duur met <strong>Cachebeheer<\/strong> en Expires, en ik vermijd dubbelzinnige ETags in omgevingen met meerdere servers. Voor Apache stel ik Expires in op zinvolle waarden en definieer ik \u201epublic, max-age\u201c voor assets. Voor Nginx voeg ik add_header directives toe en zorg ik ervoor dat HTML korte tijden krijgt of \u201eno-store\u201c als de inhoud gepersonaliseerd is. Ik deactiveer ook ETag headers als loadbalancers of proxies deze waarden niet consistent genereren. Op deze manier dwing ik duidelijk gedrag in de browser af en voorkom ik <strong>Revalidaties<\/strong> met elke klik.<\/p>\n\n<pre><code>VerlopenActief Aan\n  ExpiresByType image\/jpeg \"toegang plus 1 jaar\".\n  ExpiresByType image\/png \"toegang plus 1 jaar\".\n  ExpiresByType text\/css \"toegang plus 1 maand\"\n  ExpiresByType toepassing\/javascript \"toegang plus 1 maand\"\n\n\n\n  Header set Cache-Control \"public, max-age=31536000\" \"expr=%{CONTENT_TYPE} =~ m#^(image\/|font\/|application\/javascript)#\"\n  Header ingesteld Cache-Control \"no-cache, no-store, must-revalidate\" \"expr=%{REQUEST_URI} =~ m#(wp-admin|wp-login.php)#\"\n  ETag niet ingesteld<\/code><\/pre>\n\n<pre><code># Nginx\nlocatie ~* .(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>Uitgebreide cache control directives in het dagelijks leven<\/h2>\n\n<p>Naast \u201emax-age\u201c en \u201eno-store\u201c zorgen moderne richtlijnen voor merkbare stabiliteit. \u201eimmutable\u201c geeft aan de browser aan dat een bestand niet zal veranderen zolang de bestandsnaam hetzelfde blijft - ideaal voor assets met versiebeheer. \u201estale-while-revalidate\u201c staat toe dat een verlopen kopie wordt afgeleverd terwijl deze op de achtergrond wordt bijgewerkt. \u201estale-if-error\u201c houdt een kopie klaar als de Origin kortstondig fouten terugstuurt. \u201es-maxage\u201c is bedoeld voor proxies\/CDN's en kan andere waarden hebben dan \u201emax-age\u201c. Ook belangrijk: \u201epublic\u201c staat caching toe in gedeelde proxies; \u201eprivate\u201c is beperkt tot de browser. \u201eno-cache\u201c betekent niet \u201eniet cachen\u201c, maar \u201ecachen toegestaan, maar opnieuw valideren voor gebruik\u201c - een cruciaal verschil met \u201eno-store\u201c.<\/p>\n\n<pre><code># Apache 2.4 voorbeeld (cache assets nog robuuster)\n\n  Header set 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  Header ingesteld Cache-Control \"no-cache, must-revalidate\" \"expr=%{CONTENT_TYPE} =~ m#^text\/html#\"<\/code><\/pre>\n\n<pre><code># Nginx voorbeeld (304\/Include redirects)\nlocatie ~* .(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\" always;\n}\nlocatie ~* .html$ {\n    add_header Cache-Control \"no-cache, must-revalidate\" altijd;\n}<\/code><\/pre>\n\n<h2>Aanbevolen cache-duur per bestandstype<\/h2>\n\n<p>Ik kies de tijden op basis van veranderingsfrequentie, niet op basis van gewoonte, omdat <strong>Activa<\/strong> verouderen heel verschillend. Afbeeldingen, logo's en pictogrammen blijven meestal lang up-to-date, terwijl CSS\/JS frequentere iteraties krijgen. Webfonts veranderen zelden, maar vereisen consistente CORS-headers. HTML dient vaak als container voor dynamische inhoud en kan daarom kort of alleen gerevalideerd worden. API's moeten duidelijk gedefinieerde regels hebben zodat clients correct kunnen werken met <strong>JSON<\/strong> vermijden.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Soort bestand<\/th>\n      <th>Cache-Controle aanbeveling<\/th>\n      <th>Tip<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Afbeeldingen (jpg\/png\/webp\/avif\/svg)<\/td>\n      <td>openbaar, max-tijd=31536000<\/td>\n      <td>Jaarlijkse cache met bestandsversie gebruiken<\/td>\n    <\/tr>\n    <tr>\n      <td>CSS\/JS<\/td>\n      <td>openbaar, max-age=2592000<\/td>\n      <td>Voeg versie toe aan bestandsnaam voor updates<\/td>\n    <\/tr>\n    <tr>\n      <td>Lettertypen (woff\/woff2)<\/td>\n      <td>openbaar, max-tijd=31536000<\/td>\n      <td>Access-Control-Allow-Origin correct instellen<\/td>\n    <\/tr>\n    <tr>\n      <td>HTML (pagina's)<\/td>\n      <td>no-cache, must-revalidate of korte max-age<\/td>\n      <td>Zeer voorzichtig met dynamische inhoud<\/td>\n    <\/tr>\n    <tr>\n      <td>REST API (json)<\/td>\n      <td>private, max-age=0, must-revalidate<\/td>\n      <td>Differenti\u00ebren naar eindpunt<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Conflicten met plugins vermijden<\/h2>\n\n<p>Ik gebruik maximaal <strong>Caching-plugin<\/strong> en controleer of de hosting al regels specificeert op serverniveau. Combinaties zoals W3 Total Cache plus WP Super Cache cre\u00ebren vaak dubbele directives die elkaar opheffen. WP Rocket is snel in te stellen, maar heeft duidelijke uitsluitingen nodig voor dynamische paden en e-commerce. In ieder geval controleer ik de gegenereerde .htaccess na het opslaan om onlogische headers te herkennen. Vervolgens test ik kritieke pagina's zoals afrekenen, inloggen en gepersonaliseerde dashboards op correcte <strong>omzeilen<\/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>Caching en cookies: ingelogde gebruikers, WooCommerce, sessies<\/h2>\n\n<p>HTML voor ingelogde gebruikers mag niet worden opgeslagen in de openbare cache. WordPress plaatst cookies zoals <code>wordpress_ingelogd_<\/code>, WooCommerce aangevuld <code>woocommerce_items_in_cart<\/code>, <code>wp_woocommerce_sessie_<\/code> en anderen. In plaats van de over <em>Vary: Cookie<\/em> Ik omzeil caches volledig voor dergelijke verzoeken. Hierdoor blijven afrekenprocessen stabiel en gepersonaliseerde gebieden correct. Ik gebruik ook server-side regels die meer beperkende headers instellen wanneer cookies worden herkend.<\/p>\n\n<pre><code># Apache: cookies herkennen en bypass-headers instellen\n\n  SetEnvIfNoCase Cookie \"wordpress_logged_in_|woocommerce_items_in_cart|wp_woocommerce_session\" has_session\n  Header ingesteld Cache-Control \"private, no-store\" env=has_session<\/code><\/pre>\n\n<pre><code># Nginx: Cookie-gebaseerde omleiding\nif ($http_cookie ~* \"(wordpress_logged_in|woocommerce_items_in_cart|wp_woocommerce_session)\") {\n    add_header Cache-Control \"private, no-store\" always;\n}<\/code><\/pre>\n\n<p>Veel cachingplugins bieden hiervoor selectievakjes (WooCommerce\/Cart\/Exclude checkout). Belangrijk: Nonces (<code>_wpnonce<\/code>) in formulieren en de Heartbeat API genereren frequente wijzigingen. Ik zorg ervoor dat frontend HTML met nonces niet permanent wordt gecached of werkt via \u201eno-cache, must-revalidate\u201c.<\/p>\n\n<h2>Gerichte behandeling van HTML: gepersonaliseerd vs. algemeen<\/h2>\n\n<p>Niet alle pagina's zijn hetzelfde. Artikelen, landingspagina's en juridische pagina's kunnen vaak in de cache worden opgeslagen met een korte TTL of revalidatie. Archieven, zoekpagina's, dashboards, accountgebieden en checkouts blijven dynamisch. Als er sprake is van pagina-caching, houd ik me aan de volgende praktijk: cache alleen openbare HTML zonder cookies, anders \u201epriv\u00e9\u201c of \u201eno-store\u201c. Als je micro-caching test (bijv. 30-60 seconden voor drukbezochte, niet-gepersonaliseerde pagina's), moet je strikte uitsluitingen defini\u00ebren voor queryparameters en sessies. WordPress heeft met <code>DONOTCACHEPAGE<\/code> een constante die sjablonen kunnen instellen op lastige pagina's - ik gebruik deze consequent om fouten te voorkomen.<\/p>\n\n<h2>Server-side caching verstandig combineren<\/h2>\n\n<p>Browser caching eindigt in de client, maar ik ontlast ook de server met pagina, object en opcode cache voor echte <strong>Pieken in belasting<\/strong>. Page caching levert statische HTML voordat PHP zelfs maar start. Redis of Memcached verminderen databasequery's voor herhaalde verzoeken en verlagen de TTFB merkbaar. OPcache levert vooraf gecompileerde PHP bytecodefragmenten en verkort zo de uitvoeringstijd. Wat uiteindelijk telt is een schone verbinding tussen de servercache en de browsercache, zodat het tweede bezoek min of meer een succes is. <strong>instant<\/strong> werkt.<\/p>\n\n<h2>CDN-integratie zonder verrassingen<\/h2>\n\n<p>CDN's gebruiken hun eigen TTL-logica en reageren op \u201es-maxage\u201c. Ik maak daarom een duidelijk onderscheid: \u201emax-age\u201c voor browsers, \u201es-maxage\u201c voor Edge. Als er implementaties in behandeling zijn, trigger ik een gerichte zuivering in plaats van globaal \u201eCache Everything\u201c te vernietigen. Belangrijk: Cache HTML alleen op de Edge als er geen cookies bij betrokken zijn. Anders worden er onjuiste toestanden gecre\u00eberd omdat de Edge-cache gepersonaliseerde reacties deelt. Voor assets stel ik lange TTL's in en vertrouw ik op versiebeheer van bestandsnamen. CDN's kunnen query strings negeren - nog een reden om versies in de bestandsnaam te houden. Header normalisatie (geen overbodige \u201eVary\u201c waarden, consistente \u201eContent-Type\u201c) voorkomt opgeblazen cache sleutels.<\/p>\n\n<h2>Stap voor stap: schone installatie<\/h2>\n\n<p>Ik begin met een plugin en activeer browser caching voor CSS, JS, afbeeldingen en lettertypen voordat ik de <strong>.htaccess<\/strong> afronden. Vervolgens stel ik max-age hoog in voor statische assets en voorzie ik HTML van korte tijden of no-cache regels. Ik deactiveer ETags als er meerdere servers bij betrokken zijn en vertrouw op Last-Modified plus 304. Vervolgens activeer ik een preload zodat belangrijke pagina's direct beschikbaar zijn als statische kopie\u00ebn. Tot slot controleer ik winkel-, aanmeld- en beheerpaden zodat er geen priv\u00e9-inhoud wordt opgeslagen in de <strong>tijdelijke opslag<\/strong> land.<\/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>Praktische diagnostiek met CLI en header-controles<\/h2>\n\n<p>DevTools zijn verplicht, maar ik ga dieper met CLI-tests. A <code>curl -I<\/code> toont koptekst zonder download; met <code>-H<\/code> Ik simuleer voorwaarden. Ik controleer bijvoorbeeld of revalidaties echt 304 retourneren, of \u201eLeeftijd\u201c toeneemt vanaf een proxy\/CDN en of cookies caching uitschakelen.<\/p>\n\n<pre><code># Kopregel weergeven\ncurl -I https:\/\/example.com\/style.css\n\n# hervalidatie simuleren (If-Modified-Since)\ncurl -I -H \"If-Modified-Since: Tue, 10 Jan 2023 10:00:00 GMT\" https:\/\/example.com\/style.css\n\n# test met cookie (zou omzeiling moeten forceren)\ncurl -I -H \"Cookie: wordpress_logged_in_=1\" https:\/\/example.com\/<\/code><\/pre>\n\n<p>Ik zorg ervoor dat assets een lange \u201ecache control\u201c waarde hebben, idealiter \u201eimmutable\u201c. HTML moet \u201eno-cache\u201c of een korte TTL hebben. Als ik nog steeds 200 krijg in plaats van 304, zijn er vaak redirects in het spel die ETags\/Last-Modified ongeldig maken. Bovendien is \u201eadd_header\u201c in Nginx standaard alleen van toepassing op 200 reacties - met \u201ealways\u201c stel ik ook de headers in voor 304 en 301\/302.<\/p>\n\n<h2>Testen en valideren van headers<\/h2>\n\n<p>Ik open DevTools, herlaad de pagina \u00e9\u00e9n keer, wis de cache en herlaad om 304 vs. <strong>200<\/strong> om te observeren. In het netwerkpaneel controleer ik de cachecontrole, de leeftijd, ETag\/load-modified en de responsgroottes. Als er nog steeds directe hits zijn in plaats van revalidaties, controleer ik op conflicten met redirects, cookies of query strings. Voor lastige gevallen helpt dit artikel over valkuilen met headers me: <a href=\"https:\/\/webhosting.de\/nl\/http-cache-headers-saboteren-caching-cachefix\/\">Sabotage cache header<\/a>. Ik herhaal de controle na elke plugin-update omdat wijzigingen in regels vaak geruisloos worden doorgevoerd. <strong>pas<\/strong>.<\/p>\n\n<h2>Versiebeheer, CDN en cache-busting<\/h2>\n\n<p>Ik hang de <strong>Versie<\/strong> aan bestandsnamen (style.23.css in plaats van style.css?ver=23) zodat browsers lange caches behouden en nieuwe inhoud toch onmiddellijk laden. Een CDN distribueert statische bestanden wereldwijd, stelt zijn eigen TTL's in op edge PoPs en verkort de RTT's drastisch. Belangrijk: Cache HTML alleen in het CDN als er geen personalisatie nodig is, anders worden er verkeerde toestanden aangemaakt. Tijdens het uitrollen verander ik het versienummer automatisch, zodat gebruikers nooit met oude scripts blijven zitten. Zo combineer ik harde browser TTL's met veilige <strong>Cache breken<\/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>Schone versiebeheer in WordPress builds<\/h2>\n\n<p>Het meest betrouwbaar is een bouwpijplijn die hashes in bestandsnamen schrijft (bijv. <code>app.9f3c.css<\/code>). WordPress laadt dan precies dit bestand - browsers kunnen het een jaar lang bewaren dankzij \u201eimmutable\u201c. Als fallback, als bestandsnamen niet kunnen worden gewijzigd, stel ik het versienummer dynamisch in op basis van de bestandsdatum. Dit houdt query strings correct en betrouwbaar.<\/p>\n\n<pre><code>\/\/ functions.php (fallback versiebeheer via 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('theme', get_stylesheet_directory_uri() . '\/dist\/style.css', [], $ver);\n});<\/code><\/pre>\n\n<p>Belangrijk: Als de bestandsnaam versies bevat, kan \u201eonveranderlijk\u201c worden ingesteld. Als je alleen query strings gebruikt, moeten browsers kunnen revalideren zodat updates betrouwbaar aankomen. Ik zorg er ook voor dat build tools oude bestanden opschonen zodat CDN's niet onnodig veel varianten opslaan.<\/p>\n\n<h2>Cache en laad webfonts correct<\/h2>\n\n<p>Webfonts hebben lange TTL's, correcte CORS-headers en optionele preload nodig zodat <strong>Sprongen in lay-out<\/strong> verschijnen niet. Ik plaats woff2-bestanden op hetzelfde domein of stel Access-Control-Allow-Origin netjes in. Definieer daarnaast font-display: swap zodat tekst direct zichtbaar blijft terwijl het lettertype aan het laden is. Als je de laadtijd van je lettertypen wilt optimaliseren, vind je hier nuttige tips: <a href=\"https:\/\/webhosting.de\/nl\/wordpress-webfonts-laadtijd-optimalisatie-serverperf\/\">Laad webfonts sneller<\/a>. Met schone cache headers en een preconnect naar CDN's verkort ik FOUT\/FOIT merkbaar en zorg ik voor consistente <strong>Weergave<\/strong>-Resultaten.<\/p>\n\n<h2>Lettertypen, CORS en Vary correct afstemmen<\/h2>\n\n<p>Fonts van een andere Origin vereisen CORS. Ik stel in <code>Toegangsbeheer-oorsprong toestaan<\/code> (bijvoorbeeld naar je eigen domein of \u201e*\u201c voor echt openbaar) en voorkom een onnodige <code>Varieert: Oorsprong<\/code>, die cache sleutels opblaast. Aanbevolen voor lettertypen: <code>public, max-age=31536000, immutable<\/code>. Preload verbetert First Paint, maar verandert de TTL niet - preload en hard caching vullen elkaar aan. Ik vergeet ook niet dat gecomprimeerde levering (<code>br<\/code>\/<code>gzip<\/code>) a <code>Vary: Accept-Encoding<\/code> is nodig om proxy's correct te scheiden.<\/p>\n\n<h2>Typische foutpatronen en snelle oplossingen<\/h2>\n\n<p>Als er oude code verschijnt na een update, wordt de <strong>Versiebeheer<\/strong> op de bestandsnaam. Als de browser elke keer volledig opnieuw laadt, zijn er headers met tegenstrijdige instructies of verwijderen proxies deze onderweg. Als een checkout wordt geannuleerd, cacht de site waarschijnlijk pagina's aan de sessiezijde of API-responses. Als beheerpaden in de cache terechtkomen, ontbreken uitsluitingen voor wp-admin en login of cachingt een plugin globaal. Ik los dit op door stap voor stap te deactiveren, headers te consolideren, kritieke paden uit te sluiten en uiteindelijk het effect met 304 status <strong>bevestigen<\/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>Vaak over het hoofd geziene details die een groot verschil maken<\/h2>\n\n<ul>\n  <li><strong>Nginx add_header<\/strong> is niet van toepassing op 304\/redirects zonder \u201ealtijd\u201c - cache-headers ontbreken dan voor validaties. Ik stel \u201ealtijd\u201c consequent in.<\/li>\n  <li><strong>Verlopen vs. cachecontrole:<\/strong> \u201eCache-Control\u201c heeft prioriteit, \u201eExpires\u201c dient als fallback voor oude clients. Vermijd dubbele, tegenstrijdige informatie.<\/li>\n  <li><strong>ETag in opstellingen met meerdere servers:<\/strong> Inconsistente ETags vernietigen 304. Ik schakel ETags uit of gebruik zwakke validators en vertrouw op \u201eLast-Modified\u201c.<\/li>\n  <li><strong>Varieer tot een minimum:<\/strong> \u201eVary: Accept-Encoding\u201c is verplicht voor compressie, \u201eVary: Cookie\u201c vult edge caches - beter omzeilen op basis van cookies.<\/li>\n  <li><strong>SVG en MIME-type:<\/strong> Correct <code>image\/svg+xml<\/code> ingesteld, geef lange TTL en overweeg inline SVG's voor kritieke pictogrammen.<\/li>\n  <li><strong>Vermijd omleidingsketens:<\/strong> Elke 301\/302 kan validators verliezen en 200 forceren - schone URL's zonder cascades.<\/li>\n  <li><strong>Gebruik prioriteit\/voorbelasting op een gerichte manier:<\/strong> <code>fetchpriority=\"hoog\"<\/code> of preload voor kritieke onderdelen versnelt de eerste oproep; caching is effectief voor terugkerende gebruikers.<\/li>\n  <li><strong>REST-API onderscheiden:<\/strong> Publieke, zelden veranderende JSON's kunnen kort worden gecached; eindpunten met tokens\/cookies strikt \u201epriv\u00e9\u201c.<\/li>\n<\/ul>\n\n<h2>Kort samengevat<\/h2>\n\n<p>Ik vertrouw op duidelijke <strong>Regels<\/strong>lange TTL's voor assets, korte of gerevalideerde HTML-reacties, versiebeheer en een enkele caching-plugin. Vervolgens combineer ik browser cache met pagina, object en opcode cache om serverbelasting te verminderen. Ik controleer DevTools, zoek naar 304, controleer headers en elimineer conflicten met redirects of cookies. Voor de praktische test vergelijk ik metingen op de eerste en herhaalde oproepen en concentreer me op merkbare verbeteringen. Als je deze stappen volgt, kun je WordPress naar een betrouwbaar niveau van browser caching brengen. <strong>Snelheid<\/strong> en houdt gebruikers en zoekmachines tevreden.<\/p>","protected":false},"excerpt":{"rendered":"<p>WordPress en browser caching zijn vaak verkeerd geconfigureerd. Leer hoe je wp cache headers correct instelt voor optimale wordpress prestaties.<\/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":"983","_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":[],"_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\/nl\/wp-json\/wp\/v2\/posts\/17058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/comments?post=17058"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/posts\/17058\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/media\/17051"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/media?parent=17058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/categories?post=17058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/nl\/wp-json\/wp\/v2\/tags?post=17058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}