No-Vary-Search: HTTP Header Tang Cache Hit Ratio Cho WordPress Bo Qua UTM Parameters

Câu trả lời nhanh
No-Vary-Search la HTTP response header moi, cho phep browser cache bo qua query parameters khong anh huong den noi dung (utm_source, fbclid, gclid). Giup WordPress site tang cache hit ratio, giam TTFB va cai thien Core Web Vitals cho trang co marketing tracking parameters.

Tuần trước mình kiểm tra PageSpeed Insights cho một site WordPress khách hàng và phát hiện một vấn đề kỳ lạ: trang /sale/ có LCP 2.1s nhưng trang /sale/?utm_source=facebook lại có LCP 3.8s. Cùng một trang, cùng nội dung, nhưng URL có query parameter lại chậm hơn gần gấp đôi. Nguyên nhân là browser cache không reuse được response khi query string khác nhau, bắt server phải trả lại toàn bộ HTML từ đầu. Và đó là lúc mình tìm thấy No-Vary-Search, một HTTP response header mới giải quyết đúng vấn đề này.

No-Vary-Search HTTP Header giúp WordPress cache hiệu quả hơn với URL parameters

No-Vary-Search La Gi Va Vi Sao WordPress Site Can No?

No-Vary-Search la mot HTTP response header moi, cho phep ban noi cho browser cache rang “nhung query parameter nay khong anh huong den noi dung, dung de chung phan cache”. Mac dinh, browser xuat ly moi URL co query string khac nhau nhu la trang khac nhau. Dieu nay nghiem trong voi WordPress vi cac utm_source, fbclid, gclid tu marketing campaign tao ra hang tram ban sao cache cua cung mot trang.

Vi Sao Query Parameters Pha Hong WordPress Cache?

Khi mot visitor mo /blog/bai-viet/, browser cache HTML response. Nhung khi URL la /blog/bai-viet/?utm_source=google, browser xem nhu URL moi va khong dung cache. Anh huong gi? Server phai render lai toan bo page, query database, chay PHP, tra HTML. Tren WordPress voi MySQL, mot request nhu vay mat 200-500ms addtional. Nhuong nhuoc hon: TTFB tang, Core Web Vitals xuong, server load cao.

De y rang cac marketing tool tu dong them parameter vao URL: Google Ads them gclid, Facebook them fbclid, email marketing them utm_source, utm_medium, utm_campaign. Mot trang landing page co the nhan 20-50 parameter khac nhau, moi parameter tao ra mot cache entry rieng. Lang phi storage va hit ratio giam dang ke.

Cau Hinh No-Vary-Search Cho WordPress Nhu The Nao?

Mình se huong dan ban 3 cach cau hinh No-Vary-Search phu hop voi moi loai hosting. Truoc het, ban can hieu cu phap cua header nay. Co 4 dang chinh ma ban se dung:

# 1. Bo qua cac parameter cu the (pho bien nhat)
No-Vary-Search: params=("utm_source" "utm_medium" "utm_campaign" "fbclid" "gclid")

# 2. Bo qua tat ca parameters (chi dung cho trang tinh)
No-Vary-Search: params

# 3. Bo qua tat ca, ngoai tru mot so parameter quan trong
No-Vary-Search: params, except=("page" "p" "product_id")

# 4. Bo qua thu tu parameter
No-Vary-Search: key-order

# 5. Ket hop: bo qua thu tu + bo qua parameter cu the
No-Vary-Search: key-order, params=("utm_source" "utm_medium" "fbclid" "gclid")

Luu y cu phap: Khong giong nhu Cache-Control dung dau phay, No-Vary-Search dung Structured Fields syntax voi dau cach phan tach. params=("a" "b" "c"), khong phai params=("a","b","c"). Day la loi minhm thay nhieu admin gap.

Cau Hinh No-Vary-Search Tren Nginx Cho WordPress?

Neu site WordPress cua ban chay tren Nginx (pho bien nhat voi VPS), them header vao server block. Mình thich dat o location block rieng de kiem soat chinh xac:

# /etc/nginx/sites-available/yoursite.com
# Them vao server block hoac location block

server {
    listen 443 ssl http2;
    server_name yoursite.com;
    root /var/www/yoursite.com/public_html;

    # Cau hinh cho tat ca pages
    location / {
        # WordPress frontend
        try_files $uri $uri/ /index.php?$args;

        # No-Vary-Search: bo qua tracking parameters
        add_header No-Vary-Search 'params=("utm_source" "utm_medium" "utm_campaign" "utm_content" "utm_term" "fbclid" "gclid" "msclkid" "mc_eid" "mc_cid")';
    }

    # Khong ap dung cho WooCommerce cart/checkout (can parameter!)
    location ~ ^/(cart|checkout|my-account) {
        try_files $uri $uri/ /index.php?$args;
        # Khong co No-Vary-Search o day
    }

    # Khong ap dung cho admin
    location /wp-admin/ {
        # Khong co No-Vary-Search o day
    }
}

Sau khi sua, kiem tra config va reload:

# Kiem tra config truoc
sudo nginx -t

# Neu OK, reload
sudo systemctl reload nginx

# Kiem tra header da duoc gui
curl -I https://yoursite.com/blog/ | grep -i "no-vary-search"
# Output mong doi: no-vary-search: params=("utm_source" "utm_medium" ...)

Cau Hinh No-Vary-Search Tren Apache Cho WordPress?

Neu ban dung Apache (shared hosting hoac cPanel), them vao .htaccess. Nhung can chu y: Apache can module mod_headers duoc bat:

# /var/www/yoursite.com/public_html/.htaccess
# Them vao tren # BEGIN WordPress

<IfModule mod_headers.c>
    # Bo qua tracking parameters cho toan site
    Header set No-Vary-Search 'params=("utm_source" "utm_medium" "utm_campaign" "utm_content" "utm_term" "fbclid" "gclid" "msclkid")'
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
...
</IfModule>
# END WordPress

Kiem tra header:

curl -I https://yoursite.com/ | grep -i "no-vary-search"

Cau Hinh No-Vary-Search Tren Cloudflare Cho WordPress?

Neu ban dung Cloudflare (va hau het WordPress site nen dung), ban co the them header qua Transform Rules hoac Workers. Cach nhanh nhat la dung Response Header Modification:

Cach 1: Transform Rules (free plan). Vao Cloudflare Dashboard > Rules > Transform Rules > Modify Response Header > Create rule:

Rule name: No-Vary-Search for tracking params
When: URI Path matches wildcard "/blog/*"
Then:
  Static: Set header "no-vary-search"
  Value: params=("utm_source" "utm_medium" "utm_campaign" "fbclid" "gclid")

Cach 2: Cloudflare Workers. Neu ban can logic phuc tap hon:

// Cloudflare Worker
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const response = await fetch(request)
  
  // Chi ap dung cho HTML pages
  const contentType = response.headers.get('Content-Type') || ''
  if (contentType.includes('text/html')) {
    const newResponse = new Response(response.body, response)
    newResponse.headers.set(
      'No-Vary-Search',
      'params=("utm_source" "utm_medium" "utm_campaign" "utm_content" "fbclid" "gclid" "msclkid")'
    )
    return newResponse
  }
  
  return response
}

Nhung Parameter Nao Nen Bo Qua Va Nen Giu Lai?

Day la buc anh minh nen de hoi nhieu nhat. Khong phai parameter nao cung nen bo qua. Nguyen tac cua minh la: parameter khong lam thay doi HTML output thi bo qua, parameter lam thay doi noi dung thi giu lai.

Nen bo qua (safe to ignore):

# Analytics & tracking
utm_source, utm_medium, utm_campaign, utm_content, utm_term

# Social media click IDs  
fbclid (Facebook), gclid (Google Ads), msclkid (Microsoft Ads)

# Email marketing
mc_eid, mc_cid (Mailchimp)

# Affiliates
aff_id, ref, affiliate

# Internal tracking (neu HTML khong thay)
_ga, _gl, srsltid

Phai giu lai (CRITICAL – khong duoc bo):

# WordPress core
p (post ID), page_id, page (pagination), paginated

# WooCommerce
add-to-cart, cart_item_key, order_id, download_file

# Search
s, search (ket qua search khac nhau)

# E-commerce variants
variation_id, attribute_*, color, size

# Pagination
paged, offset, limit

Neu ban sai bo qua page hay paged, trang 2 va trang 3 se cung cache entry va visitor luon thay trang 1. Day la loi nghiem trong ma minh tung gap voi mot site tin tuc.

Browser Nao Ho Tro No-Vary-Search?

Ho tro hien tai (tinh den thang 7/2026): Chrome tu version 125+ ho tro day du. Edge theo sau vi dung Chromium engine. Firefox chua ho tro chinh thuc, dang trong giai doan testing. Safari chua ho tro. Mobile: Chrome Android ho won, Safari iOS chua.

Dieu nay co nghia la khoang 60-70% traffic se duoc loi. Cho Firefox va Safari, hoat dong mac dinh (khong cache query parameter) van nhu cu. Khong co gi pha vo, chi la khong toi uu. No-Vary-Search la progressive enhancement thuan tuy: ho tro thi tot hon, khong ho tro thi khong sao.

Cach Do Luong Cache Hit Ratio Truoc Va Sau?

De chung minh No-Vary-Search hoat dong, ban can do truoc va sau. Mình dung hai cach chinh:

Cach 1: Chrome DevTools. Mo DevTools > Network > mo trang /blog/. Sau do mo /blog/?utm_source=test. Truoc khi co No-Vary-Search: request thu 2 tra ve 200 (tu server). Sau khi co No-Vary-Search: request thu 2 tra ve (disk cache). Do la ban chung.

Cach 2: WebPageTest.org. Chay test voi URL /sale/?utm_source=google va /sale/?utm_source=facebook. Xem cot “First View” vs “Repeat View”. Khi No-Vary-Search hoat dong, repeat view se cache hit ngay ca khi URL parameter khac.

# Kiem tra header da duoc gui that
curl -sI "https://yoursite.com/blog/" | grep -i vary
curl -sI "https://yoursite.com/blog/?utm_source=test" | grep -i "no-vary-search"

# Test cache behavior
# Mo 2 tab trong browser:
# Tab 1: https://yoursite.com/blog/
# Tab 2: https://yoursite.com/blog/?utm_source=test
# Mo DevTools > Network ca 2 tab
# Neu No-Vary-Search hoat dong: Tab 2 se lay tu cache, khong hit server

No-Vary-Search Khac Gi Voi Vary Header?

Day la cau hoi minh nhan duoc tu nhieu admin. Vary header noi “response nay phu thuoc vao request header nao”. Vi du Vary: Accept-Encoding nghia la server tra HTML nen va non-nen khac nhau, cache phai luu rieng. No-Vary-Search lam viec tuong tu nhung cho query parameter thay vi request header. Chung bo sung nhau, khong thay the:

# Vary: phu thuoc vao request header
Vary: Accept-Encoding, Accept-Language

# No-Vary-Search: khong phu thuoc vao query parameter nay
No-Vary-Search: params=("utm_source" "fbclid" "gclid")

# Ca hai cung ton tai tren cung response
Vary: Accept-Encoding
No-Vary-Search: params=("utm_source" "fbclid")

Cac Loi Thuong Gap Khi Cau Hinh No-Vary-Search?

Trong qua trinh ap dung cho 5-6 site WordPress, minh gap mot so loi thuong gap ma ban can de y:

Loi 1: Bo qua parameter quan trong. Dac biet voi WooCommerce. Neu ban bo qua add-to-cart hay variation_id, customer them vao gio hang nhung khong thay ket qua. Luon test checkout flow sau khi ap dung No-Vary-Search.

Loi 2: Cu phap Structured Fields sai. Nhiều admin viet params=("a","b") voi dau phay. Dung phai la params=("a" "b") voi dau cach. Header se bi ignore im lang ma ban khong biet.

Loi 3: Cache plugin xung dot. Neu ban dung LiteSpeed Cache hay WP Rocket, chung co the strip header khong quen thuoc. Kiem tra response header that bang curl -I sau khi clear cache.

# Fix cho LiteSpeed Cache: them header vao rewrite
# Trong .htaccess, dat TRUOC LiteSpeed Cache block
<IfModule mod_headers.c>
    Header set No-Vary-Search 'params=("utm_source" "fbclid" "gclid")'
</IfModule>

# Fix cho WP Rocket: them vao functions.php
add_filter('rocket_htaccess_mod_rewrite', function($rules) {
    $header = '<IfModule mod_headers.c>' . "\n";
    $header .= 'Header set No-Vary-Search ';
    $header .= "'params=(\"utm_source\" \"fbclid\" \"gclid\")'\n";
    $header .= '</IfModule>' . "\n\n";
    return $header . $rules;
});

Loi 4: Debug kho vi DevTools khong hien ro. Khi browser cache hit nho No-Vary-Search, DevTools Network tab co the hien (disk cache) nhung khong noi vi sao. De debug, mo Application tab > Cache Storage > kiem tra cache entries hoac dung chrome://net-internals/#httpCache.

Should You Use No-Vary-Search On Every WordPress Site?

Cau tra loi ngan: co, nhung can than. Neu site WordPress cua ban co traffic tu marketing campaign (Google Ads, Facebook Ads, email marketing), No-Vary-Search se tang cache hit ratio dang ke. Tren server co 1.000 visitor/ngay voi 30% co utm parameter, ban se giam khoang 300 server request tren cache hit. Tuc la giam TTFB cho nhung visitor nay tu 300-800ms xuong <50ms.

Nhung neu ban co WooCommerce, phai can than voi parameter cua cart va checkout. Minh khuyen chi ap dung No-Vary-Search cho blog posts va landing pages, khong ap dung cho pages co logic query parameter. Va luon test sau khi ap dung: mo trang voi va khong co parameter, kiem tra cache behavior, kiem tra checkout flow.

No-Vary-Search la cong cu manh va don gian. Mot header duy nhat, khong plugin, khong JavaScript, khong thay doi code. Chi can them mot dong vao Nginx hoac .htaccess va browser lam phan con lai. Thu nghiem tren site cua ban va xem cache hit ratio tang nhu the nao nhe.

Thanh Tùng

Mình là Thanh Tùng. Bạn bè gọi mình là "bác sĩ máy tính" vì hễ máy nào có vấn đề là mình muốn mò vào xem sao. Mình viết hướng dẫn theo cách mà mình mong người khác đã viết cho mình ngày xưa — từng bước rõ ràng, không bỏ sót, và nói luôn cái gì hay bị lỗi. Ngoài giờ làm mình chơi guitar, nuôi mèo, và có một con VPS riêng dành riêng cho việc cài thử đủ thứ linh tinh.

Xem tất cả bài viết →

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *