Cache gclid: kueri klik iklan, kunci cache halaman, dan byte pertama yang diukur

Penanganan cache gclid adalah perilaku yang mengabaikan kueri gclid di ujung URL klik iklan dan merespons dengan file cache URL tanpa kueri. Hasil pengukuran byte pertama berdasarkan kueri dan ada-tidaknya cache di server WordPress dengan Nginx + Apache menunjukkan bahwa waktu yang ditambahkan gclid adalah 0.014–0.015 detik, dan penundaan hingga beberapa detik hanya terjadi saat cache tidak bisa dipakai.
Byte pertama yang diukur di dalam server yang sama adalah 0.014–0.015 detik tanpa kueri dan 0.029–0.030 detik saat kueri klik iklan ditambahkan. Saat WordPress membuat halaman yang sama dari awal tanpa cache, waktunya 3.639 detik dan 3.260 detik.
1️⃣ Cache gclid: URL klik iklan dan kunci cache
Jika fitur penandaan otomatis Google Ads aktif, [?gclid=nilai] ditambahkan di ujung URL pengunjung yang mengeklik iklan. Nilai ini adalah parameter yang mengidentifikasi klik iklan, jadi berbeda untuk setiap pengunjung, meski ada kalanya orang yang sama mengeklik iklan yang sama lagi dan mendapat nilai yang sama.
URL klik iklan yang sebenarnya jarang hanya membawa gclid. gad_source, gad_campaignid, dan gbraid sering ikut ditambahkan, dan kadang ada juga wbraid.
https://example.com/sample-page/?gad_source=1&gad_campaignid=1234567890&gbraid=EXAMPLE&gclid=EXAMPLE
https://example.com/sample-page/?gclid=EXAMPLE&gbraid=EXAMPLE&wbraid=EXAMPLEMeski ada kueri di ujung URL, browser tetap membuka halaman yang sama, tetapi bagi cache itu alamat yang berbeda. Standar cache HTTP (RFC 9111) mendefinisikan kunci cache, yaitu dasar cache memilih respons yang disimpan, setidaknya terdiri dari metode permintaan dan URI target, dan URI target juga mencakup string kueri.
Jika string kueri masuk ke kunci cache apa adanya, setiap klik dengan nilai gclid yang berbeda menjadi alamat baru. CDN, nginx, dan WP Rocket yang dilewati respons menangani kueri ini dengan aturannya masing-masing.
Jika CDN tidak punya salinan atau kunci cache-nya membedakan kueri, permintaan diteruskan ke server asal. Setelah itu, kecepatannya ditentukan oleh apakah nginx dan WP Rocket menemukan file cache.
2️⃣ Penyajian statis nginx: permintaan berkueri diteruskan ke Apache
Meski file cache ada di disk, nginx pada konfigurasi Nginx + Apache tidak menyajikan file itu secara langsung untuk permintaan yang membawa kueri. Sebabnya, pengaturan di bawah yang membuat nginx langsung membaca file cache WP Rocket hanya membentuk jalur file saat string kueri kosong.
# nginx.conf — blok http: syarat untuk melewati file cache
map $http_cookie $rocket_cookie {
default 0;
'~*wordpress_logged_in' 1;
'~*wp-postpass' 1;
'~*comment_author' 1;
'~*woocommerce_items' 1;
}
map $request_method $rocket_method {
default 1;
GET 0;
HEAD 0;
}
map $query_string $rocket_query {
default 1;
'' 0; # 0 hanya saat string kueri kosong
}
# blok server
set $rocket_bypass '';
if ($rocket_cookie = 1) { set $rocket_bypass '1'; }
if ($rocket_method = 1) { set $rocket_bypass '1'; }
if ($rocket_query = 1) { set $rocket_bypass '1'; }
set $rocket_file '/wp-content/cache/wp-rocket/example.com${request_uri}index-https.html';
if ($rocket_bypass = '1') { set $rocket_file ''; }
location / {
try_files $rocket_file @apache; # ke Apache jika jalurnya kosong atau filenya tidak ada
add_header X-Rocket-Nginx-Serving-File 'HIT' always; # tanda bahwa nginx menyajikan langsung dari file cache
}[$rocket_query] hanya memeriksa apakah seluruh string kueri kosong, jadi gclid yang diabaikan WP Rocket pun diperlakukan sama seperti kueri lain. Jika salinan seluler disimpan terpisah, ada satu pemeriksaan lagi yang menambahkan [-mobile] ke nama file.
Aturan [.htaccess] yang dibuat WP Rocket untuk Apache juga mensyaratkan string kueri kosong. Tahap yang menyajikan file cache langsung tanpa PHP, baik di nginx maupun Apache, hanya berlaku untuk permintaan tanpa kueri.
Permintaan tanpa kueri membawa header [X-Rocket-Nginx-Serving-File: HIT], sedangkan enam permintaan dengan gclid dan kueri berpola iklan tidak membawa header ini. Byte pertama permintaan berkueri bertambah 0.014–0.015 detik karena ada tambahan proses Apache dan PHP membaca lalu mengirim file cache.
curl -so /dev/null -H 'Accept-Encoding: gzip' -w '%{time_starttransfer}\n' \
'https://example.com/sample-page/'0.015127curl -so /dev/null -H 'Accept-Encoding: gzip' -w '%{time_starttransfer}\n' \
'https://example.com/sample-page/?gclid=test123'0.029525curl -sI 'https://example.com/sample-page/' | grep -i x-rocket-nginx-serving-filex-rocket-nginx-serving-file: HIT[time_starttransfer] adalah waktu dari permintaan sampai byte pertama diterima. Untuk mengukur di dalam server tanpa melewati CDN, tambahkan juga [--resolve example.com:443:127.0.0.1].
3️⃣ Daftar kueri yang diabaikan WP Rocket: dijawab dengan file cache yang sama
Tidak meng-cache URL berkueri adalah perilaku bawaan WP Rocket, tetapi kueri klik iklan adalah pengecualian. WP Rocket membuang parameter yang ada di daftar kueri yang diabaikan sebelum menilai, dan jika tidak ada kueri yang tersisa, WP Rocket menjawab dengan file cache URL tanpa kueri.
// wp-rocket/inc/classes/Buffer/class-tests.php (3.23.5.1)
public function get_query_params() {
// …
$params = array_diff_key( // buang kueri yang diabaikan lebih dulu
self::$get,
$this->config->get_config( 'cache_ignored_parameters' )
);
// …
}
public function can_process_query_string() {
// …
$params = $this->get_query_params();
if ( ! $params ) { // jika tidak ada kueri tersisa, tangani dengan cache
return self::memoize( __FUNCTION__, [], true );
}
// hanya lang · s · permalink_name · lp-variation-id dan kueri yang dimasukkan ke [Cache Query String(s)] yang lolos
// …
}Jika hasil [get_query_params] setelah membuang kueri yang diabaikan kosong, jalur file cache juga ditetapkan ke URL tanpa kueri. Permintaan dengan gclid melewati Apache dan PHP, tetapi komentar cache di akhir HTML sama dengan permintaan tanpa kueri, dan ukuran responsnya juga sama dengan file cache (gzip), yaitu 350,668 byte.
Daftar kueri yang diabaikan adalah daftar bawaan yang diunduh WP Rocket dari servernya seminggu sekali dan disimpan di [wp-content/wp-rocket-config/dynamic-lists.json]. Per 17 Oktober 2026, daftar ini memuat gclid, gbraid, wbraid, gad_source, dan gad_campaignid.
Jika ada satu saja kueri yang tidak ada di daftar, WP Rocket tidak memakai cache: halaman yang sama dengan kueri sembarang yang tidak ada di daftar dibuat ulang oleh WordPress tanpa komentar cache. Jika URL iklan Anda juga membawa kueri pelacakan buatan sendiri, klik itu selalu diproses lewat jalur ini.
Untuk mengubah daftar ini, gunakan plugin helper yang dianjurkan WP Rocket. Plugin ini menambah atau mengurangi kueri lewat filter [rocket_cache_ignored_parameters] dan membuat ulang file konfigurasi WP Rocket saat diaktifkan atau dinonaktifkan.
// dari WP Rocket | Ignore Query Strings 1.1.1 (plugin helper tim dukungan WP Rocket)
function define_ignored_parameters( array $params ) {
$params['new_query_string'] = 1; // tambahkan ke kueri yang diabaikan
//unset ( $params['utm_source'] ); // keluarkan dari kueri yang diabaikan
return $params;
}
add_filter( 'rocket_cache_ignored_parameters', __NAMESPACE__ . '\define_ignored_parameters', 999 );
register_activation_hook( __FILE__, __NAMESPACE__ . '\flush_wp_rocket' ); // menjalankan rocket_generate_config_file() saat diaktifkanWP Rocket menuliskan daftar ini ke file konfigurasi bernama domain di dalam [wp-content/wp-rocket-config/] dan membaca file itu di setiap permintaan, jadi jika hanya menambahkan filter tanpa membuat ulang file konfigurasi, daftar baru tidak berlaku. Kueri dalam daftar memakai satu file cache dari URL dasar berapa pun nilainya, jadi jangan masukkan kueri yang nilainya mengubah isi halaman.
Setelah [uk_test] yang belum ada di daftar ditambahkan ke plugin helper lalu plugin diaktifkan, file konfigurasi dibuat ulang dan kueri itu ditambahkan di akhir daftar. Lalu URL tanpa kueri dan dua URL dengan nilai [uk_test] berbeda diminta secara berurutan.
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/'
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/?uk_test=abc'
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/?uk_test=xyz'21390 0.025720
21390 0.025507
21390 0.027929Ketiga permintaan menerima 21,390 byte yang sama dalam waktu kurang dari 0.03 detik, dan akhir HTML permintaan dengan [uk_test] dibuka untuk memeriksa waktu cache.
curl -s --compressed 'https://example.com/sample-page/?uk_test=abc' | tail -c 200ck=lazyLoadYoutubeIframe;}});</script></body>
</html>
<!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1792248839 -->Waktu cache di komentar penutup sama dengan file cache URL tanpa kueri. Sebelum plugin helper diaktifkan, permintaan yang sama dibuat ulang tanpa komentar cache dalam 0.36–0.38 detik.
Setelah diaktifkan pun, permintaan yang juga membawa [foo], yang tidak ada di daftar, tidak memakai file cache dan dibuat ulang.
Selama 1 menit tepat setelah file konfigurasi dibuat ulang, permintaan [uk_test] juga dibuat ulang. Karena PHP OPcache dikonfigurasi memeriksa ulang file yang berubah setiap 60 detik (revalidate_freq), respons baru datang dari file cache setelah 1 menit berlalu.
Meski plugin helper dinonaktifkan lalu dihapus, baris [uk_test] tetap ada di file konfigurasi. Kode yang berjalan saat penonaktifan mencoba melepas filter yang ditambahkan dengan prioritas 999 menggunakan prioritas bawaan, sehingga file konfigurasi dibuat ulang dengan filter yang masih terpasang. Kueri itu baru keluar dari daftar setelah file konfigurasi dibuat sekali lagi sesudah plugin dihapus.
4️⃣ Kunci cache CDN: mengecualikan kueri iklan dan permintaan ke server asal
Jika CDN memasukkan string kueri ke kunci cache apa adanya, setiap klik dengan nilai gclid berbeda tidak menemukan salinan dan permintaannya diteruskan sampai ke server asal. Membuang seluruh kueri menghilangkan masalah ini, tetapi tidak cocok untuk situs yang punya URL dengan isi yang berubah sesuai kueri seperti hasil pencarian, jadi lebih tepat hanya mengeluarkan kueri iklan dari kunci cache.
Dengan kueri iklan dikeluarkan seperti ini, CDN menjawab dengan salinan yang sama seperti URL tanpa kueri meski nilai gclid berbeda, dan hanya meminta ke server asal dengan kueri terpasang saat tidak ada salinan.
# Status cache CDN untuk dua permintaan dengan nilai gclid berbeda (nama header berbeda di setiap CDN)
curl -sI 'https://example.com/sample-page/?gclid=test1' | grep -i -E 'cache|age'curl -sI 'https://example.com/sample-page/?gclid=test2' | grep -i -E 'cache|age'Jika kedua permintaan dengan nilai berbeda sama-sama HIT dan waktu penyimpanan salinannya sama dengan URL tanpa kueri, CDN itu mengeluarkan gclid dari kunci cache. Kunjungan pertama di lokasi yang salinannya kosong tetap melewati pemrosesan nginx dan WP Rocket di server asal, meski CDN mengeluarkan kueri iklan dari kuncinya.
5️⃣ Penyebab klik iklan lambat: cache halaman yang kosong
Jika halaman pertama dari iklan terasa lambat, mudah mengira gclid melewati cache, padahal jika file cache ada, file cache yang sama tetap disajikan meski ada kueri. Yang menambah byte pertama hingga beberapa detik adalah file cache yang kosong sehingga WordPress membuat halaman dari awal.
File cache dihapus setelah Masa berlaku cache habis; nilai bawaan WP Rocket adalah 10 jam. Saat postingan atau pengaturan disimpan, cache terkait juga ikut terhapus, dan saat daftar yang diunduh WP Rocket seminggu sekali diganti versi baru lalu disimpan, seluruh cache situs juga dikosongkan.
Jika preload aktif, WP Rocket membuka lagi URL yang dikosongkan dan mengisi ulang cache, dan pengunjung yang datang sebelum itu harus menunggu halaman dibuat ulang. Permintaan yang hanya membawa kueri iklan juga membuat file cache untuk URL tanpa kueri, jadi klik iklan pertama yang bertemu cache kosong mengisi cache untuk pengunjung berikutnya.
Tepat setelah cache dikosongkan, permintaan pertama yang dibuka dengan kueri berpola iklan tidak menemukan file cache dan dibuat ulang dalam 0.341–0.369 detik, dan file cache untuk URL tanpa kueri muncul di detik yang sama.
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/?gclid=EXAMPLE1'
ls -l --time-style='+%F %T' wp-content/cache/wp-rocket/example.com/sample-page/
curl -s -o /dev/null -w '%{size_download} %{time_starttransfer}\n' -H 'Accept-Encoding: gzip' 'https://example.com/sample-page/'21361 0.366881
Total 116
-rw-r--r-- 1 example nobody 90908 2026-10-17 23:56:38 index-https.html
-rw-r--r-- 1 example nobody 21385 2026-10-17 23:56:38 index-https.html_gzip
21385 0.025379Ketiga uji berjalan dengan urutan yang sama, dan permintaan tanpa kueri yang dibuka setelahnya dijawab dengan file cache baru dalam 0.023–0.025 detik. Karena permintaannya bukan dari perangkat seluler, hanya dua file untuk PC yang terbentuk.
Untuk URL tujuan iklan, periksa langsung apakah file cache ada dan kapan dibuat, dan jika salinan seluler dibuat terpisah, periksa file PC dan seluler sekaligus.
ls -l --time-style='+%F %T' wp-content/cache/wp-rocket/example.com/sample-page/Total 3520
-rw-r--r-- 1 example nobody 1445922 2026-10-17 14:07:44 index-https.html
-rw-r--r-- 1 example nobody 350668 2026-10-17 14:07:44 index-https.html_gzip
-rw-r--r-- 1 example nobody 1446862 2026-10-17 14:07:47 index-mobile-https.html
-rw-r--r-- 1 example nobody 351042 2026-10-17 14:07:47 index-mobile-https.html_gzipcurl -s --compressed 'https://example.com/sample-page/?gclid=test123' | tail -c 200n/1/wp-content/uploads/example-plugin/style.css' media='all' /></noscript></body>
</html>
<!-- Cached for great performance - Debug: cached@1792213663 -->Respons yang berasal dari file cache memuat waktu pembuatan file cache dalam waktu Unix setelah [Debug: cached@] di komentar akhir HTML. Jika tanda ini tidak ada, respons itu dibuat ulang oleh WordPress.
🔢 FAQ & Konten yang Direkomendasikan














ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.

