แคชกับ gclid: คิวรีจากการคลิกโฆษณา คีย์แคชของหน้า และไบต์แรกที่วัดได้

การจัดการแคชกับ gclid คือการเพิกเฉยต่อคิวรี gclid ที่ต่อท้าย URL คลิกโฆษณา แล้วตอบด้วยไฟล์แคชของ URL ที่ไม่มีคิวรี จากการวัดไบต์แรกแยกตามคิวรีและการมีหรือไม่มีแคชบนเซิร์ฟเวอร์ WordPress แบบ Nginx + Apache เวลาที่ gclid เพิ่มขึ้นคือ 0.014–0.015 วินาที และความล่าช้าระดับหลายวินาทีเกิดเฉพาะเมื่อใช้แคชไม่ได้
ไบต์แรกที่วัดภายในเซิร์ฟเวอร์เดียวกันคือ 0.014–0.015 วินาทีเมื่อไม่มีคิวรี และ 0.029–0.030 วินาทีเมื่อเติมคิวรีคลิกโฆษณา เมื่อ WordPress สร้างหน้าเดียวกันใหม่โดยไม่มีแคช ใช้เวลา 3.639 วินาทีและ 3.260 วินาที
1️⃣ แคชกับ gclid: URL คลิกโฆษณาและคีย์แคช
ถ้าใช้ฟีเจอร์ติดแท็กอัตโนมัติของ Google Ads จะมี [?gclid=ค่า] ต่อท้าย URL ของผู้เข้าชมที่คลิกโฆษณา ค่านี้เป็นพารามิเตอร์ที่ระบุการคลิกโฆษณา จึงต่างกันในแต่ละผู้เข้าชม แม้บางครั้งคนเดิมที่คลิกโฆษณาเดิมซ้ำอาจได้ค่าเดิม
URL คลิกโฆษณาจริงมักไม่ได้มีแค่ gclid ตัวเดียว มักมี gad_source, gad_campaignid และ gbraid ต่อมาด้วย และบางครั้งก็มี 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=EXAMPLEแม้มีคิวรีต่อท้าย URL เบราว์เซอร์ก็ยังเปิดหน้าเดียวกัน แต่สำหรับแคชถือเป็นที่อยู่คนละที่ มาตรฐานแคช HTTP (RFC 9111) กำหนดว่าคีย์แคชซึ่งเป็นเกณฑ์ที่แคชใช้เลือกการตอบสนองที่บันทึกไว้ ต้องประกอบด้วยอย่างน้อยเมธอดของคำขอและ URI เป้าหมาย และ URI เป้าหมายรวมสตริงคิวรีด้วย
ถ้าสตริงคิวรีเข้าไปอยู่ในคีย์แคชตามเดิม ทุกคลิกที่ค่า gclid ต่างกันจะกลายเป็นที่อยู่ใหม่ CDN, nginx และ WP Rocket ที่การตอบสนองผ่านจัดการคิวรีนี้ด้วยเกณฑ์ต่างกัน
ถ้า CDN ไม่มีสำเนาหรือคีย์แคชแยกคิวรี คำขอจะถูกส่งต่อไปเซิร์ฟเวอร์ต้นทาง ความเร็วหลังจากนั้นขึ้นอยู่กับว่า nginx และ WP Rocket หาไฟล์แคชเจอหรือไม่
2️⃣ การให้บริการไฟล์คงที่ของ nginx: ถ้ามีคิวรีจะส่งต่อให้ Apache
แม้ไฟล์แคชจะอยู่บนดิสก์ nginx ในการตั้งค่าแบบ Nginx + Apache ก็ไม่ตอบคำขอที่มีคิวรีด้วยไฟล์นั้นโดยตรง เพราะการตั้งค่าข้างล่างที่ให้ nginx อ่านไฟล์แคชของ WP Rocket โดยตรง จะสร้างเส้นทางไฟล์เฉพาะเมื่อสตริงคิวรีว่าง
# nginx.conf — บล็อก http: เงื่อนไขที่จะข้ามไฟล์แคช
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 เฉพาะเมื่อสตริงคิวรีว่าง
}
# บล็อก 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; # ส่งให้ Apache ถ้าเส้นทางว่างหรือไม่มีไฟล์
add_header X-Rocket-Nginx-Serving-File 'HIT' always; # เครื่องหมายว่า nginx ตอบด้วยไฟล์แคชโดยตรง
}[$rocket_query] ตรวจเพียงว่าสตริงคิวรีทั้งหมดว่างหรือไม่ gclid ที่ WP Rocket ละเว้นจึงถูกจัดการเหมือนคิวรีอื่น ถ้าตั้งค่าให้เก็บสำเนามือถือแยก จะมีการตรวจอีกขั้นที่เติม [-mobile] ในชื่อไฟล์
กฎ [.htaccess] ที่ WP Rocket สร้างให้ Apache ก็มีเงื่อนไขว่าสตริงคิวรีต้องว่าง ขั้นที่ตอบด้วยไฟล์แคชโดยตรงโดยไม่ผ่าน PHP ไม่ว่าจะเป็น nginx หรือ Apache ใช้กับคำขอที่ไม่มีคิวรีเท่านั้น
คำขอที่ไม่มีคิวรีมีเฮดเดอร์ [X-Rocket-Nginx-Serving-File: HIT] ส่วนคำขอหกครั้งที่ต่อ gclid และคิวรีแบบโฆษณาไม่มีเฮดเดอร์นี้ ไบต์แรกของคำขอที่มีคิวรีเพิ่มขึ้น 0.014–0.015 วินาที เพราะมีขั้นตอนที่ Apache และ PHP อ่านไฟล์แคชแล้วตอบเพิ่มเข้ามา
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] คือเวลาตั้งแต่ส่งคำขอจนได้รับไบต์แรก เมื่อวัดภายในเซิร์ฟเวอร์โดยไม่ผ่าน CDN ให้เติม [--resolve example.com:443:127.0.0.1] ไปด้วย
3️⃣ รายการคิวรีที่ WP Rocket ละเว้น: ตอบด้วยไฟล์แคชเดียวกัน
การไม่แคช URL ที่มีคิวรีคือการทำงานพื้นฐานของ WP Rocket แต่คิวรีคลิกโฆษณาเป็นข้อยกเว้น WP Rocket จะตัดพารามิเตอร์ที่อยู่ในรายการคิวรีที่ละเว้นออกก่อนตัดสิน และถ้าไม่มีคิวรีเหลือ จะตอบด้วยไฟล์แคชของ URL ที่ไม่มีคิวรี
// wp-rocket/inc/classes/Buffer/class-tests.php (3.23.5.1)
public function get_query_params() {
// …
$params = array_diff_key( // ตัดคิวรีที่ละเว้นออกก่อน
self::$get,
$this->config->get_config( 'cache_ignored_parameters' )
);
// …
}
public function can_process_query_string() {
// …
$params = $this->get_query_params();
if ( ! $params ) { // ถ้าไม่มีคิวรีเหลือ จัดการด้วยแคช
return self::memoize( __FUNCTION__, [], true );
}
// ผ่านได้เฉพาะ lang · s · permalink_name · lp-variation-id และคิวรีที่ใส่ใน [Cache Query String(s)]
// …
}ถ้าผลของ [get_query_params] หลังตัดคิวรีที่ละเว้นออกว่าง เส้นทางไฟล์แคชก็ถูกกำหนดเป็น URL ที่ไม่มีคิวรี คำขอที่ต่อ gclid ผ่าน Apache และ PHP แต่คอมเมนต์แคชท้าย HTML เหมือนคำขอที่ไม่มีคิวรี และขนาดการตอบสนองก็เท่ากับไฟล์แคช (gzip) คือ 350,668 ไบต์
รายการคิวรีที่ละเว้นคือรายการพื้นฐานที่ WP Rocket ดาวน์โหลดจากเซิร์ฟเวอร์ของตัวเองสัปดาห์ละครั้งแล้วบันทึกไว้ใน [wp-content/wp-rocket-config/dynamic-lists.json] ณ วันที่ 17 ตุลาคม 2026 รายการนี้มี gclid, gbraid, wbraid, gad_source และ gad_campaignid
ถ้ามีคิวรีที่ไม่อยู่ในรายการปนมาแม้แต่ตัวเดียว WP Rocket จะไม่ใช้แคช หน้าเดียวกันที่ต่อคิวรีใด ๆ ที่ไม่อยู่ในรายการถูก WordPress สร้างใหม่โดยไม่มีคอมเมนต์แคช ถ้าคุณต่อคิวรีติดตามที่สร้างเองเข้ากับ URL โฆษณาด้วย คลิกนั้นจะผ่านเส้นทางนี้ทุกครั้ง
เมื่อต้องการเปลี่ยนรายการ ให้ใช้ ปลั๊กอินตัวช่วยที่ WP Rocket แนะนำ ปลั๊กอินนี้เพิ่มหรือลบคิวรีผ่านฟิลเตอร์ [rocket_cache_ignored_parameters] และสร้างไฟล์การตั้งค่าของ WP Rocket ใหม่เมื่อเปิดหรือปิดใช้งาน
// จาก WP Rocket | Ignore Query Strings 1.1.1 (ปลั๊กอินตัวช่วยของทีมซัพพอร์ต WP Rocket)
function define_ignored_parameters( array $params ) {
$params['new_query_string'] = 1; // เพิ่มในคิวรีที่ละเว้น
//unset ( $params['utm_source'] ); // เอาออกจากคิวรีที่ละเว้น
return $params;
}
add_filter( 'rocket_cache_ignored_parameters', __NAMESPACE__ . '\define_ignored_parameters', 999 );
register_activation_hook( __FILE__, __NAMESPACE__ . '\flush_wp_rocket' ); // รัน rocket_generate_config_file() เมื่อเปิดใช้งานWP Rocket เขียนรายการนี้ลงในไฟล์การตั้งค่าที่ตั้งชื่อตามโดเมนภายใน [wp-content/wp-rocket-config/] และอ่านไฟล์นั้นทุกคำขอ ถ้าใส่แค่ฟิลเตอร์โดยไม่สร้างไฟล์การตั้งค่าใหม่ รายการใหม่จะไม่มีผล คิวรีในรายการใช้ไฟล์แคชเดียวของ URL พื้นฐานไม่ว่าค่าจะเป็นอะไร จึงไม่ควรใส่คิวรีที่ค่าของมันเปลี่ยนเนื้อหาหน้า
หลังเพิ่ม [uk_test] ที่ไม่มีในรายการลงในปลั๊กอินตัวช่วยแล้วเปิดใช้งาน ไฟล์การตั้งค่าถูกสร้างใหม่และคิวรีนั้นถูกเพิ่มต่อท้ายรายการ จากนั้นได้ส่งคำขอ URL ที่ไม่มีคิวรีและ URL ที่ค่า [uk_test] ต่างกันสอง URL ตามลำดับ
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.027929ทั้งสามคำขอได้ 21,390 ไบต์เท่ากันภายใน 0.03 วินาที และได้เปิดท้าย HTML ของคำขอที่ต่อ [uk_test] เพื่อตรวจเวลาแคช
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 -->เวลาแคชในคอมเมนต์ท้ายตรงกับไฟล์แคชของ URL ที่ไม่มีคิวรี ก่อนเปิดใช้ปลั๊กอินตัวช่วย คำขอเดียวกันถูกสร้างใหม่โดยไม่มีคอมเมนต์แคชในเวลา 0.36–0.38 วินาที
แม้เปิดใช้งานแล้ว คำขอที่ต่อ [foo] ซึ่งไม่อยู่ในรายการมาด้วยก็ไม่ใช้ไฟล์แคชและถูกสร้างใหม่
ในช่วง 1 นาทีทันทีหลังสร้างไฟล์การตั้งค่าใหม่ คำขอ [uk_test] ก็ถูกสร้างใหม่ด้วย เพราะตั้งค่า PHP OPcache ให้ตรวจไฟล์ที่เปลี่ยนซ้ำทุก 60 วินาที (revalidate_freq) จึงเริ่มตอบด้วยไฟล์แคชหลังผ่านไป 1 นาที
แม้ปิดและลบปลั๊กอินตัวช่วยแล้ว บรรทัด [uk_test] ยังอยู่ในไฟล์การตั้งค่า เพราะโค้ดที่ทำงานตอนปิดใช้งานพยายามถอดฟิลเตอร์ที่ใส่ด้วยลำดับความสำคัญ 999 ออกด้วยลำดับความสำคัญค่าเริ่มต้น ไฟล์การตั้งค่าจึงถูกสร้างใหม่ทั้งที่ฟิลเตอร์ยังอยู่ ต้องสร้างไฟล์การตั้งค่าอีกครั้งหลังลบปลั๊กอิน คิวรีนั้นจึงจะหลุดจากรายการ
4️⃣ คีย์แคชของ CDN: การตัดคิวรีโฆษณาและคำขอไปยังต้นทาง
ถ้า CDN ใส่สตริงคิวรีลงในคีย์แคชตามเดิม ทุกคลิกที่ค่า gclid ต่างกันจะไม่มีสำเนาและคำขอถูกส่งไปถึงเซิร์ฟเวอร์ต้นทาง ถ้าตัดคิวรีออกทั้งหมด ปัญหานี้จะหายไป แต่ไม่เหมาะกับเว็บไซต์ที่มี URL ที่เนื้อหาเปลี่ยนตามคิวรีอย่างผลการค้นหา จึงควรตัดเฉพาะคิวรีโฆษณาออกจากคีย์แคช
เมื่อตัดคิวรีโฆษณาแบบนี้ แม้ค่า gclid ต่างกัน CDN ก็ตอบด้วยสำเนาเดียวกับ URL ที่ไม่มีคิวรี และจะส่งคำขอพร้อมคิวรีไปเซิร์ฟเวอร์ต้นทางเฉพาะเมื่อไม่มีสำเนา
# สถานะแคช CDN ของสองคำขอที่ค่า gclid ต่างกัน (ชื่อเฮดเดอร์ต่างกันตาม 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'ถ้าสองคำขอที่ค่าต่างกันเป็น HIT ทั้งคู่และเวลาที่บันทึกสำเนาตรงกับ URL ที่ไม่มีคิวรี แสดงว่า CDN นั้นตัด gclid ออกจากคีย์แคช การเข้าชมครั้งแรกที่จุดที่ยังไม่มีสำเนา แม้ CDN จะตัดคิวรีโฆษณาออกจากคีย์ ก็ยังผ่านการประมวลผลของ nginx และ WP Rocket บนเซิร์ฟเวอร์ต้นทางตามเดิม
5️⃣ สาเหตุที่คลิกโฆษณาช้า: แคชหน้าเว็บที่ว่างอยู่
ถ้าหน้าแรกที่เข้ามาจากโฆษณาช้า มักเข้าใจว่า gclid ทำให้ข้ามแคช แต่ถ้ามีไฟล์แคช แม้มีคิวรีก็ตอบด้วยไฟล์แคชเดียวกัน สิ่งที่ทำให้ไบต์แรกเพิ่มขึ้นหลายวินาทีคือกรณีที่ไฟล์แคชว่างจน WordPress ต้องสร้างหน้าใหม่
ไฟล์แคชจะถูกลบเมื่อพ้น อายุแคชแล้ว ค่าเริ่มต้นของ WP Rocket คือ 10 ชั่วโมง เมื่อบันทึกโพสต์หรือการตั้งค่า แคชที่เกี่ยวข้องจะถูกลบไปด้วย และเมื่อรายการที่ WP Rocket ดาวน์โหลดสัปดาห์ละครั้งถูกเปลี่ยนเป็นเวอร์ชันใหม่แล้วบันทึก แคชของทั้งเว็บไซต์ก็ถูกล้าง
ถ้าเปิด preload ไว้ WP Rocket จะเปิด URL ที่ถูกล้างอีกครั้งเพื่อเติมแคช ผู้เข้าชมที่มาก่อนหน้านั้นต้องรอเวลาที่หน้าเว็บถูกสร้างใหม่ คำขอที่มีแค่คิวรีโฆษณาก็สร้างไฟล์แคชด้วย URL ที่ไม่มีคิวรี คลิกโฆษณาแรกที่เจอแคชว่างจึงเติมแคชให้ผู้เข้าชมคนถัดไป
ทันทีหลังล้างแคช คำขอแรกที่เปิดด้วยคิวรีแบบโฆษณาไม่พบไฟล์แคชและถูกสร้างใหม่ใน 0.341–0.369 วินาที และไฟล์แคชของ URL ที่ไม่มีคิวรีเกิดขึ้นในวินาทีเดียวกัน
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
รวม 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.025379ทั้งสามครั้งดำเนินไปตามลำดับเดียวกัน และคำขอที่ไม่มีคิวรีที่เปิดต่อมาได้รับการตอบจากไฟล์แคชใหม่ใน 0.023–0.025 วินาที เพราะคำขอไม่ได้มาจากอุปกรณ์มือถือ จึงเกิดเฉพาะไฟล์สำหรับ PC สองไฟล์
สำหรับ URL ปลายทางของโฆษณา ให้ตรวจเองว่ามีไฟล์แคชหรือไม่และสร้างเมื่อไร และถ้าตั้งค่าให้สร้างสำเนามือถือแยก ให้ตรวจทั้งไฟล์ PC และมือถือ
ls -l --time-style='+%F %T' wp-content/cache/wp-rocket/example.com/sample-page/รวม 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 -->การตอบสนองที่มาจากไฟล์แคชจะมีเวลาที่สร้างไฟล์แคชเป็นเวลา Unix อยู่หลัง [Debug: cached@] ในคอมเมนต์ท้าย HTML ถ้าไม่มีเครื่องหมายนี้ แสดงว่า WordPress สร้างการตอบสนองนั้นใหม่
🔢 FAQ & เนื้อหาแนะนำ














ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

