Cachování stránek, CDN a bannery souhlasu: jak nepodávat špatný stav souhlasu
Rychlé stránky, špatný souhlas
Cachování stránek je jedna z nejlepších věcí, které můžete udělat pro rychlost a náklady na hosting. Je to také jeden z nejsnazších způsobů, jak nastavení souhlasu nepozorovaně rozbít. Cache dělá přesně to, co jí řeknete: odpověď jednou uloží a podá ji všem, kdo odpovídají stejnému klíči. Pokud uložená odpověď obsahuje cokoli specifického pro volbu souhlasu nebo polohu jednoho návštěvníka, dostane to i další návštěvník.
Tento průvodce pokrývá vrstvy cachování, které obvykle stojí před webem vydavatele — edge cache CDN, pluginy pro cachování celých stránek, reverzní proxy, service workery a samotný prohlížeč — a jak každé z nich zabránit v podávání špatného prostředí souhlasu.
Základní pravidlo: držte souhlas mimo cachované HTML
Nejbezpečnější architektura vykresluje cachovanou HTML stránku jako neutrální vůči souhlasu. Stránka obsahuje loader CMP a vaše tagy v blokovaném nebo čekajícím stavu, ale bez rozhodnutí o tomto konkrétním návštěvníkovi. CMP pak běží v prohlížeči, přečte uloženou volbu, rozhodne, zda zobrazit banner, a podle toho uvolní tagy.
Problémy začínají, když server činí rozhodnutí o souhlasu v okamžiku vykreslení, například:
- šablona nebo plugin, který reklamní či analytické tagy vypisuje, jen když je přítomno cookie souhlasu;
- serverový kód, který vynechává markup banneru pro návštěvníky, kteří už volili;
- šablony, které vkládají stav souhlasu návštěvníka do proměnné inline skriptu.
Jakmile se taková stránka cachuje, stav prvního návštěvníka se stane stavem všech. Návštěvník, který odmítl sledování, může dostat stránku s již aktivními tagy, nebo nový návštěvník banner nikdy neuvidí, protože cachovaná kopie pochází od někoho, kdo ho už zavřel.
Proč “Vary: Cookie” málokdy pomůže
Učebnicovým řešením pro obsah podle návštěvníka je říct cache, aby variovala podle hlavičky cookie. V praxi návštěvníci nosí mnoho cookies s jedinečnými hodnotami, takže variování podle celé hlavičky cookie obvykle srazí míru zásahů cache téměř na nulu. Některá CDN umožňují sestavit klíč cache z jediné hodnoty cookie, což je schůdné, pokud má vaše cookie souhlasu malý počet možných stavů, ale přidává to složitost a stále to násobí počet cachovaných kopií. Přesun rozhodnutí do prohlížeče je jednodušší a udržuje cache efektivní.
Geografie na edge
Mnoho vydavatelů zobrazuje různé bannery podle regionu: opt-in banner pro EU a Spojené království, oznámení o odhlášení pro americké státy a něco lehčího jinde. Pokud server vybírá variantu podle IP adresy návštěvníka a stránka se cachuje, může evropský čtenář dostat cachovanou americkou stránku, nebo naopak.
Vyhnout se tomu lze třemi vzory:
- Geolokace na straně klienta. Nechte CMP určit region v prohlížeči, takže cachované HTML zůstane pro všechny stejné.
- Země v klíči cache. Pokud musíte rozhodovat na edge, zahrňte do klíče cache kód země, který poskytuje vaše CDN. Dostanete jednu cachovanou kopii na zemi, což je předvídatelné.
- Necachovaná logika na edge. Spusťte regionální rozhodnutí v edge funkci, která do jinak cachované stránky vloží malou necachovanou hodnotu.
Ať zvolíte cokoli, zdokumentujte to. Geografické chyby patří k nejhůře reprodukovatelným, protože se objevují jen u návštěvníků na jednom místě, kteří náhodou dostanou stránku cachovanou někým na jiném.
Cachování samotného skriptu CMP
Dlouhé cachování loaderu CMP je dobré pro výkon, ale má cenu, když se mění konfigurace. Pokud aktualizujete dodavatele, účely nebo text banneru a skript či konfigurační soubor je cachovaný rok, někteří návštěvníci budou dál vidět starou verzi. Zjistěte, jak váš CMP verzuje soubory: měnící se název souboru nebo parametr verze umožňuje agresivní cachování při okamžitém nasazení změn. Ověřte také, že vaše CDN neodstraňuje query řetězce z URL skriptů třetích stran, pokud se na ně CMP spoléhá.
Service workery a offline cache
Weby s vrstvou progresivní webové aplikace často cachují HTML v service workeru. Platí stejné pravidlo: nikdy neukládejte stránku, která odráží konkrétní rozhodnutí o souhlasu. Endpointy související se souhlasem a stránky centra předvoleb vyřaďte z cachování service workeru a zajistěte, aby šlo vždy získat čerstvou konfiguraci CMP.
Cache back/forward
Moderní prohlížeče drží nedávno navštívené stránky v paměti, aby je tlačítko zpět okamžitě obnovilo. Pokud návštěvník otevře na jedné stránce centrum předvoleb, odvolá souhlas a pak stiskne zpět, obnovená stránka může mít stále spuštěné tagy z dřívějška. Poslouchejte událost pageshow a zkontrolujte její vlastnost persisted: když se stránka obnoví z této cache, znovu přečtěte uložený stav souhlasu a tagy podle něj zastavte nebo spusťte.
Testovací rutina
- Načtěte stránku v čisté relaci, odmítněte, pak načtěte druhou stránku a ověřte, že se nespustí žádné sledovací tagy.
- Zopakujte s druhým čistým prohlížečem a ověřte, že se banner objeví, což dokazuje, že nezmizel kvůli cachování.
- Zkontrolujte hlavičky odpovědí, zda se stránky podávají z cache, a porovnejte HTML s cookie souhlasu a bez něj — mělo by být identické.
- Otestujte z alespoň dvou regionů po vyčištění cache a pak znovu, až se cache zahřeje.
- Odvolejte souhlas, použijte tlačítko zpět a ověřte, že se tagy zastaví.
Klíčové poznatky
- Cachované HTML by mělo být neutrální vůči souhlasu; nechte CMP rozhodovat v prohlížeči.
- Vyhněte se variování podle celé hlavičky cookie; ničí míru zásahů.
- Pokud se bannery liší podle regionu, rozhodujte na straně klienta nebo přidejte zemi do klíče cache.
- Soubory CMP verzujte, aby dlouhé doby cachování nezdržovaly změny konfigurace.
- Ošetřete service workery a cache back/forward a testujte se zahřátou cache, ne jen po vyčištění.