Caching σελίδων, CDN και banners συναίνεσης: Πώς να μην σερβίρετε λάθος κατάσταση συναίνεσης
Γρήγορες σελίδες, λάθος συναίνεση
Το caching σελίδων είναι ένα από τα καλύτερα πράγματα που μπορείτε να κάνετε για την ταχύτητα και το κόστος φιλοξενίας. Είναι επίσης ένας από τους ευκολότερους τρόπους να χαλάσετε μια ρύθμιση συναίνεσης χωρίς να το καταλάβετε. Μια cache κάνει ακριβώς ό,τι της λένε: αποθηκεύει μια απάντηση μία φορά και τη σερβίρει σε όλους όσοι ταιριάζουν με το ίδιο κλειδί. Αν αυτή η αποθηκευμένη απάντηση περιέχει οτιδήποτε ειδικό για την επιλογή συναίνεσης ή την τοποθεσία ενός επισκέπτη, την παίρνει και ο επόμενος επισκέπτης.
Αυτός ο οδηγός καλύπτει τα επίπεδα caching που συνήθως βρίσκονται μπροστά από έναν ιστότοπο εκδότη — edge caches CDN, plugins full-page caching, reverse proxies, service workers και το ίδιο το πρόγραμμα περιήγησης — και πώς να εμποδίσετε το καθένα να σερβίρει λάθος εμπειρία συναίνεσης.
Ο βασικός κανόνας: Κρατήστε τη συναίνεση έξω από το HTML στην cache
Η ασφαλέστερη αρχιτεκτονική αποδίδει τη σελίδα HTML που μπαίνει στην cache ως ουδέτερη ως προς τη συναίνεση. Η σελίδα περιέχει τον loader του CMP και τα tags σας σε αποκλεισμένη ή αναμονής κατάσταση, αλλά καμία απόφαση για αυτόν τον συγκεκριμένο επισκέπτη. Το CMP τρέχει έπειτα στο πρόγραμμα περιήγησης, διαβάζει την αποθηκευμένη επιλογή, αποφασίζει αν θα εμφανίσει το banner και απελευθερώνει τα tags αναλόγως.
Τα προβλήματα ξεκινούν όταν ο server παίρνει αποφάσεις συναίνεσης κατά το render, για παράδειγμα:
- ένα theme ή plugin που τυπώνει tags διαφημίσεων ή analytics μόνο όταν υπάρχει cookie συναίνεσης·
- κώδικας server-side που παραλείπει το markup του banner για επισκέπτες που έχουν ήδη επιλέξει·
- templates που ενσωματώνουν την κατάσταση συναίνεσης του επισκέπτη σε μεταβλητή inline script.
Μόλις αποθηκευτεί στην cache αυτή η σελίδα, η κατάσταση του πρώτου επισκέπτη γίνεται κατάσταση όλων. Ένας επισκέπτης που απέρριψε το tracking μπορεί να λάβει σελίδα με ήδη ενεργά tags ή ένας νέος επισκέπτης μπορεί να μη δει ποτέ banner επειδή το αντίγραφο στην cache προήλθε από κάποιον που το είχε ήδη κλείσει.
Γιατί το “Vary: Cookie” σπάνια είναι η απάντηση
Η λύση του εγχειριδίου για περιεχόμενο ανά επισκέπτη είναι να πείτε στις caches να διαφοροποιούνται με βάση την κεφαλίδα cookie. Στην πράξη, οι επισκέπτες φέρουν πολλά cookies με μοναδικές τιμές, οπότε η διαφοροποίηση με βάση ολόκληρη την κεφαλίδα cookie συνήθως οδηγεί το ποσοστό cache hit σχεδόν στο μηδέν. Ορισμένα CDN σας επιτρέπουν να χτίσετε το cache key από την τιμή ενός μόνο cookie, κάτι εφικτό αν το cookie συναίνεσης έχει μικρό αριθμό πιθανών καταστάσεων, αλλά προσθέτει πολυπλοκότητα και πολλαπλασιάζει παρ' όλα αυτά τα αντίγραφα στην cache. Η μετακίνηση της απόφασης στο πρόγραμμα περιήγησης είναι απλούστερη και κρατά την cache αποδοτική.
Γεωγραφία στο edge
Πολλοί εκδότες εμφανίζουν διαφορετικά banners ανά περιοχή: banner opt-in για ΕΕ και Ηνωμένο Βασίλειο, ειδοποίηση opt-out για πολιτείες των ΗΠΑ και κάτι ελαφρύτερο αλλού. Αν ο server επιλέγει την παραλλαγή από τη διεύθυνση IP του επισκέπτη και αυτή η σελίδα μπαίνει στην cache, ένας Ευρωπαίος αναγνώστης μπορεί να λάβει μια αποθηκευμένη σελίδα για τις ΗΠΑ, ή αντίστροφα.
Τρία μοτίβα το αποφεύγουν:
- Γεωεντοπισμός από την πλευρά του client. Αφήστε το CMP να καθορίσει την περιοχή στο πρόγραμμα περιήγησης, ώστε το HTML στην cache να παραμένει ίδιο για όλους.
- Η χώρα στο cache key. Αν πρέπει να αποφασίσετε στο edge, συμπεριλάβετε στο cache key τον κωδικό χώρας που παρέχει το CDN σας. Παίρνετε ένα αντίγραφο στην cache ανά χώρα, κάτι προβλέψιμο.
- Λογική edge χωρίς cache. Εκτελέστε την περιφερειακή απόφαση σε μια edge function που εισάγει μια μικρή τιμή χωρίς cache σε μια κατά τα άλλα αποθηκευμένη σελίδα.
Όποιο κι αν επιλέξετε, τεκμηριώστε το. Τα γεωγραφικά σφάλματα είναι από τα δυσκολότερα στην αναπαραγωγή, επειδή εμφανίζονται μόνο σε επισκέπτες ενός σημείου που τυχαίνει να λάβουν σελίδα που αποθήκευσε στην cache κάποιος σε άλλο.
Caching του ίδιου του script του CMP
Το μακροχρόνιο caching του loader του CMP είναι καλό για την απόδοση, αλλά έχει κόστος όταν αλλάζει η ρύθμιση. Αν ενημερώσετε vendors, σκοπούς ή κείμενο του banner και το script ή το αρχείο ρύθμισης βρίσκεται στην cache για ένα έτος, ορισμένοι επισκέπτες θα συνεχίσουν να βλέπουν την παλιά έκδοση. Ελέγξτε πώς το CMP σας εκδίδει εκδόσεις στα αρχεία του: ένα όνομα αρχείου ή μια παράμετρος έκδοσης που αλλάζει σας επιτρέπει να κάνετε επιθετικό caching και να κυκλοφορείτε τις αλλαγές αμέσως. Επιβεβαιώστε επίσης ότι το δικό σας CDN δεν αφαιρεί τα query strings από URLs scripts τρίτων αν το CMP βασίζεται σε αυτά.
Service workers και offline caches
Οι ιστότοποι με επίπεδο progressive web app συχνά αποθηκεύουν HTML σε ένα service worker. Ισχύει ο ίδιος κανόνας: ποτέ μην αποθηκεύετε σελίδα που αντικατοπτρίζει συγκεκριμένη απόφαση συναίνεσης. Εξαιρέστε τα endpoints σχετικά με τη συναίνεση και τις σελίδες του κέντρου προτιμήσεων από το caching του service worker και βεβαιωθείτε ότι μπορεί πάντα να ανακτηθεί μια νέα ρύθμιση CMP.
Η back/forward cache
Τα σύγχρονα προγράμματα περιήγησης κρατούν στη μνήμη τις σελίδες που επισκέφθηκαν πρόσφατα, ώστε το κουμπί πίσω να τις επαναφέρει άμεσα. Αν ένας επισκέπτης ανοίξει το κέντρο προτιμήσεων σε μια σελίδα, ανακαλέσει τη συναίνεση και έπειτα πατήσει πίσω, η σελίδα που επανέρχεται μπορεί να έχει ακόμη tags σε λειτουργία από πριν. Ακούστε το event pageshow και ελέγξτε την ιδιότητά του persisted: όταν μια σελίδα επαναφέρεται από αυτή την cache, διαβάστε ξανά την αποθηκευμένη κατάσταση συναίνεσης και σταματήστε ή ξεκινήστε tags ώστε να ταιριάζουν.
Μια ρουτίνα δοκιμών
- Φορτώστε μια σελίδα σε καθαρή συνεδρία, απορρίψτε, έπειτα φορτώστε μια δεύτερη σελίδα και επιβεβαιώστε ότι δεν ενεργοποιείται κανένα tracking tag.
- Επαναλάβετε με ένα δεύτερο καθαρό πρόγραμμα περιήγησης και επιβεβαιώστε ότι εμφανίζεται το banner, αποδεικνύοντας ότι δεν χάθηκε λόγω cache.
- Ελέγξτε τις κεφαλίδες απάντησης για να δείτε αν οι σελίδες σερβίρονται από την cache και συγκρίνετε το HTML με και χωρίς cookie συναίνεσης — πρέπει να είναι ίδιο.
- Δοκιμάστε από τουλάχιστον δύο περιοχές αφού καθαρίσετε την cache και ξανά αφού ζεσταθεί.
- Ανακαλέστε τη συναίνεση, χρησιμοποιήστε το κουμπί πίσω και επαληθεύστε ότι τα tags σταματούν.
Βασικά συμπεράσματα
- Το HTML στην cache πρέπει να είναι ουδέτερο ως προς τη συναίνεση· αφήστε το CMP να αποφασίζει στο πρόγραμμα περιήγησης.
- Αποφύγετε τη διαφοροποίηση με βάση ολόκληρη την κεφαλίδα cookie· καταστρέφει τα ποσοστά hit.
- Αν τα banners διαφέρουν ανά περιοχή, αποφασίστε στην πλευρά του client ή προσθέστε τη χώρα στο cache key.
- Εκδίδετε εκδόσεις στα αρχεία του CMP ώστε οι μεγάλοι χρόνοι ζωής της cache να μην καθυστερούν τις αλλαγές ρύθμισης.
- Χειριστείτε τους service workers και τη back/forward cache και δοκιμάστε με ζεστή cache, όχι μόνο μετά από καθαρισμό.