Τι ειναι το fbclid που βάζει το facebook στα urls και πως το αφαιρούμε

dimitris | Παρ, 04/05/2019 - 11:43 | 11'

Από το τέλος του 2018, το Facebook ξεκίνησε να προσθέτει στο τέλος των URLs που «μοιραζόμαστε» με τους «φίλους» μας στην πλατφόρμα μια παράμετρο fbclid. Πρόκειται για ένα tracking string με συνέπειες που ελάχιστοι αντιλαμβάνονται και ακόμα πιο λίγοι κατανοούν. Τι μας ενδιαφέρει εμάς αυτό; Μα γιατί μπορεί να επιβαρύνει τους servers μας.

Κατ’αρχάς πρέπει να πούμε ότι αυτό το query string φαίνεται να είναι μοναδικό για κάθε χρήστη, πράγμα που σηκώνει κουβέντα ως προς την ιδιωτικότητά μας στην Ευρωπαϊκή Ένωση όπου ισχύει το GDPR. Επισήμως, από ότι φαίνεται από μια ανακοίνωση του Facebook, πρόκειται για ένα ακόμα τρόπο μέτρησης με στόχο τη διαφήμιση.

Βέβαια, κανείς δεν ξέρει με σιγουριά γιατί και πως το χρησιμοποιεί με δεδομένο ότι πολλά sites έχουν πάνω και facebook pixel, π.χ. αν και πως «δένει» με τα προσωπικά δεδομένα που με μεγάλη χαρά δίναμε τόσο καιρό στο Facebook (πες μας ποιες ταινίες σου αρέσουν να «βελτιώσουμε» το προφίλ σου, και μην ανησυχείς για τα υπόλοιπα!). Βέβαια, στο Facebook δεν ιδρώνει το αυτί τους από τέτοια... Πάντως κάποιοι άλλοι λένε ότι το FB έβαλε το fbclid για να παρακάμψει το νέο cookie tracking protection της Apple στον Safari πράγμα που μπορεί να έχει κάποια λογική.

Ας αφήσουμε όμως το θέμα της ιδιωτικότητάς μας (λέγε με privacy) στην άκρη, μια και σοβαρά στοιχεία δεν έχουμε ώστε να μιλήσουμε, κι ας δούμε αυτά που μας ενδιαφέρουν εμάς ως developers δηλαδή άλλα δύο-τρία ζητήματα που προκύπτουν με αυτό το fbclid.

Κασαρίσματα τέλος!

Η πρώτη συνέπεια είναι ότι επειδή κάθε URL που ποστάρουμε στο Facebook περιέχει αυτό το query, στην πράξη λειτουργεί σαν cache buster, δηλαδή ακυρώνει κάθε κασάρισμα που έχουμε κάνει στον server ή στο CDN/cache service (π.χ. Cloudflare) που χρησιμοποιούμε. Γιατί; Διότι το URL www.linuxinsider.gr?fbclid=mitsos θεωρείται διαφορετικό από το  www.linuxinsider.gr.

Για παράδειγμα, για όσους publishers ή bloggers ποστάρουν τα άρθρα τους στο Facebook, στα URLs των άρθρων αυτών μπαίνει αυτόματα το ?fbclid =ΧΧΧΧ. Αυτό σημαίνει ότι κάθε χρήστης της πλατφόρμας που θα δει μια δημοσίευση σου και την πατήσει για να την διαβάσει ολόκληρη στο site σου, ΔΕΝ θα περάσει από την cache του CDN ούτε από την cache του server/site σου αλλά θα χτυπήσει το CMS και τη βάση δεδομένων αλύπητα. Εκτός κι αν ρυθμίσεις το CDN ή τον server να αγνοεί αυτό το query (δείτε παρακάτω).

Με απλά λόγια, η χρήση fbclid στα URLs σημαίνει ότι τα sites που έχουν πολλούς επισκέπτες από το Facebook θα έχουν μειωμένη απόδοση στα μάτια του επισκέπτη, όσον αφορά την ταχύτητα φόρτωσης της σελίδας (αυξημένο TTFB κλπ). Κι αυτό επειδή πολλά συστήματα διαχείρισης περιεχομένου (π.χ. Drupal 7, Wordpress, e-commerce), όταν βλέπουν ένα υπαρκτό URL με άγνωστο query, το θεωρούν «νέο» με την έννοια ότι δεν το έχουν κασάρει στη μνήμη. Αποτέλεσμα; Η σελίδα εμφανίζεται χωρίς βελτιστοποιήσεις, πιο αργή από ότι είναι κανονικά! Αυτό δεν ισχύει στο Drupal 8 όπου υπάρχει το concept του Dynamic Cache, αν το έχεις ρυθμίσει σωστά...

Ας δούμε μια ακόμα επίπτωση, που ενδιαφέρει τους publishers που έχουν μεγάλο ποσοστό επισκεπτών από Facebook και βασίζονται στις διαφημίσεις Adsense για έσοδα. Η ύπαρξη ?fbclid στα URLs των άρθρων που ποστάρουν στο FB, μπορεί να σημαίνει ότι την πρώτη φορά που θα έρθει ο χρήστης από το Facebook για να διαβάσει το άρθρο δεν θα δει Adsense διαφημίσεις. Δεν ξέρω κατά πόσο ισχύει αυτό και γιατί συμβαίνει (άλλωστε δεν είναι θέμα του Facebook) αλλά υπάρχουν αναφορές ότι ισχύει.

Μια ιστοσελίδα χωρίς διαφημίσεις δεν θα πειράξει καθόλου βέβαια τον επισκέπτη, αλλά δεν είναι ό,τι καλύτερο για το site... Στο τελευταίο link αναφέρουν μάλιστα πως συμβαίνει το εξής χαζό: κάθε χτύπημα σε URL με διαφορετικό fbclid, πέραν του ότι παρακάμπει το κασάρισμα της σελίδας, ωθεί ένα bot της Google (Google Mediapartners) να επισκεφτεί κι εκείνο την ίδια σελίδα! Δηλαδή φανταστείτε, αν ισχύουν όλα αυτά, τότε σε κάθε άρθρο που μοιράζεστε στο Facebook, όταν κάποιος κάνει κλικ σε αυτό, επιβαρύνει τον server και γιατί η σελίδα δεν είναι κασαρισμένη αλλά και γιατί δέχεται δύο επισκέψεις (μία από τον χρήστη και μία από το google bot). Και όλα αυτά γιατί το Facebook θέλει να παρακάμψει το Apple Intelligent Tracking Protection 2.0. Ελεος.

Υπάρχει και κάτι ακόμα όμως. Επειδή τα URLs των επισκέψεων από Facebook έχουν μοναδικά fbclids, αυτό σημαίνει ότι «πειράζουν» και τα analytics. Π.χ. το ίδιο άρθρο εμφανίζεται πολλές φορές στα Google Analytics και όχι μόνο μια φορά.

Ευτυχώς αυτό διορθώνεται εύκολα βάζοντας το fbclid στα View Settings -> Exclude URL Query Parameters

fbclid

Τέλος πάντων, αν τα παραπάνω αποτελουν πρόβλημα υπάρχουν λύσεις, τις οποίες θα δούμε ευθύς αμέσως.

Αφαίρεση fbclid σε Cloudflare

Για όσους χρησιμοποιούν Cloudflare, η λύση είναι σχετικά απλή με το να ορίσουμε έναν νέο κανόνα (ευτυχώς στο free plan η εταιρεία δίνει μερικούς κανόνες δωρεάν). Πηγαίνουμε στα Page Rules στο dashboard, δημιουργούμε ένα νέο με τον εξής κώδικα (αντί για example.com βάλτε το δικό σας domain):

1. Στο If the URL matches, βάζουμε http://www.example.com/*?fbclid=*

2. Κάνουμε κλικ στο «Add a Setting» και επιλέγουμε «Forwarding URL» και «302 - Temporary Redirect»

3. Τέλος, στο «Destination URL», βάζουμε http://www.example.com/$1

Σημείωση: Η Cloudflare έχει μια ρύθμιση  “Ignore Query String” αλλά αυτό δεν μας καλύπτει. Γιατί η ρύθμιση αφορά μόνο στατικό περιεχόμενο δηλαδή όχι HTML αρχεία.

Προσοχή: Το 302 redirect θα προσθέσει σίγουρα κάποια ms στο request. Δυστυχώς είναι όμως η μόνη free λύση. Δείτε μια paid λύση με Cloudflare workers εδώ.

Αφαίρεση fbclid σε Apache

Για να ρυθμίσουμε τον Apache να αγνοεί το fbclid και να κάνει redirect στο κανονικό URL χωρίς αυτήν την παράμετρο, πρέπει να έχουμε ενεργό mod_rewrite και να βάλουμε π.χ. στο .htaccess έναν κανόνα σαν κι αυτόν:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{QUERY_STRING} ^(.*)(?:^|&)fbclid=(?:[^&]*)((?:&|$).*)$ [NC]
  RewriteCond %1%2 (^|&)([^&].*|$)
  RewriteRule ^(.*) /$1?%2 [R=301,L]
</IfModule>

Ο παραπάνω κανόνας αφαιρεί κάθε εμφάνιση του fbclid=μπλαμπλα ενώ κρατά όλα τα υπόλοιπα queries.

Αφαίρεση όλων των queries

Αν και δεν υπάρχει λόγος, μπορείτε να αφαιρέσετε όλα τα queries με κώδικα σαν κι αυτόν:

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} "fbclid=" [NC]
RewriteRule (.*) /$1? [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Αυτά είναι τα αποτελέσματα του να υπάρχει ένα service τόσο ισχυρό, που μπορεί με μια φαινομενικά άκακη κίνηση να «σπάει» caches. Χαμένος χρόνος για τους developers...

Περισσότερα για το fbclid

Ενα ολόκληρο site αφιερωμένο στο fbclid

Addon για το Firefox

O κώδικας του Apache είναι το paranoid penguin.
 

Φόρουμ
Δώσε αστέρια!

MO: 4.5 (ψήφοι: 4)