Đăng Ký Học EN

SEO WordPress #16: Cache và kết nối, tối ưu đúng từng lớp

Checklist 124-133 tối ưu cache, webfont, preconnect, ETag, purge cache, HTTP/2, HTTP/3 và chống cache stampede cho website WordPress.

Cache và kết nối trong SEO WordPress: browser cache, page cache và máy chủ
Tối ưu cache và kết nối WordPress theo đúng loại tài nguyên, lớp lưu trữ và giao thức truyền tải.

Cache và kết nối tốt giúp WordPress gửi đúng phiên bản nội dung bằng ít công việc và ít vòng chờ hơn. Tài nguyên đã gắn phiên bản có thể cache dài hạn, HTML và API cần chính sách riêng, còn trang đăng nhập, giỏ hàng, thanh toán hoặc nội dung cá nhân hóa phải được loại khỏi page cache công khai.

Bài thứ 16 trong series SEO WordPress chuyển 10 tiêu chí từ 124 đến 133 thành quy trình kiểm tra được: Cache-Control, page cache, webfont, resource hints, phiên bản hóa, validator, purge cache, tái sử dụng kết nối, giảm số origin và chống cache stampede.

Nguyên tắc: cache đúng dữ liệu, đúng lớp và đúng thời gian; kết nối sớm chỉ tới origin thật sự quan trọng.

1. Cache và kết nối ảnh hưởng SEO WordPress như thế nào?

Cache giảm thời gian tái tạo và truyền lại dữ liệu, còn tối ưu kết nối giảm chi phí DNS, TCP, TLS và thời gian chờ request. Hai nhóm kỹ thuật này có thể cải thiện TTFB, tốc độ tải tài nguyên, độ ổn định khi traffic tăng và trải nghiệm quay lại trang.

Cache không phải một hộp duy nhất. Trình duyệt có HTTP cache; CDN có edge cache; reverse proxy hoặc web server có page cache; WordPress có object cache; PHP có opcode cache. Một URL có thể đi qua nhiều lớp trước khi tới database. Vì vậy, câu “đã bật cache” chưa đủ để kết luận.

LớpLưu gì?Mục tiêuRủi ro chính
Browser cacheCSS, JavaScript, font, ảnh, đôi khi HTMLKhông tải lại byte đã cóGiữ bản cũ nếu URL không đổi
CDN cacheTài nguyên tĩnh và HTML công khaiPhục vụ gần người dùngCache nhầm nội dung cá nhân hóa
Page cacheHTML đã renderBỏ qua PHP và truy vấn lặp lạiTrang động bị phục vụ sai người
Object cacheKết quả truy vấn, option, objectGiảm truy cập databaseInvalidation thiếu chính xác
Opcode cacheMã PHP đã biên dịchGiảm chi phí biên dịch PHPCấu hình bộ nhớ không phù hợp

Hiệu năng là kết quả của cả chuỗi. Page cache nhanh không bù được ảnh lớn từ năm origin khác nhau; HTTP/3 không sửa được HTML mất ba giây để sinh; cache một năm không an toàn nếu file CSS thay nội dung mà không đổi URL.

2. Bản đồ kiểm tra 10 tiêu chí từ 124 đến 133

Mười tiêu chí chia thành bốn nhóm: chính sách cache, cache phía máy chủ, tải tài nguyên đầu trang và quản trị kết nối. Nên kiểm từ response header và waterfall thực tế, không chỉ dựa vào trạng thái “ON” trong plugin.

Tiêu chíDấu hiệu đạtTrọng số
124Cache-Control tài nguyên tĩnhFile phiên bản hóa cache dài hạn; HTML và dữ liệu riêng có chính sách riêngBắt buộc
125Page cache phía máy chủTrang công khai có HIT và TTFB giảm rõBắt buộc
126Tải WebfontWOFF2, preload có chọn lọc, font-display phù hợpQuan trọng
127Preconnect và DNS-prefetchChỉ khai báo origin quan trọng chắc chắn dùngNên có
128Phiên bản hóa tài nguyênURL đổi khi nội dung file đổiBắt buộc
129ETag hoặc Last-ModifiedYêu cầu có điều kiện trả 304 khi phù hợpQuan trọng
130Purge cacheXóa đúng lớp, đúng URL và xác minh bản mớiBắt buộc
131Tái sử dụng kết nốiRequest cùng origin dùng kết nối và multiplexing hiệu quảQuan trọng
132Giảm số nguồn kết nốiÍt origin hơn, mỗi origin có giá trị đo đượcQuan trọng
133Warm cache và chống stampedeURL ưu tiên được làm ấm, cache miss đồng thời được điều phốiNên có

Mỗi tiêu chí cần ba bằng chứng: cấu hình dự kiến, response hoặc waterfall thực tế và kết quả trước sau trong cùng điều kiện. Nếu thiếu một lớp, audit dễ kết luận theo tên plugin thay vì hành vi thật.

3. Tiêu chí 124: Cache-Control cho tài nguyên tĩnh

Tài nguyên tĩnh đã phiên bản hóa có thể dùng Cache-Control: public, max-age=31536000, immutable, nhưng HTML, API và nội dung riêng tư cần chính sách riêng. Một năm chỉ an toàn khi URL thay đổi mỗi lần nội dung thay đổi, nhờ vậy bản mới và bản cũ không dùng chung cache key.

Cache-Control: public, max-age=31536000, immutable

MDN HTTP Caching trình bày mẫu cache dài hạn cho tài nguyên có version và giải thích no-cache không có nghĩa là cấm lưu. Nó cho phép lưu nhưng yêu cầu xác thực lại trước khi dùng. no-store mới là chỉ thị không lưu response.

Loại responseChính sách thường phù hợpLý do
CSS, JS có content hashpublic, max-age=31536000, immutableURL mới khi byte thay đổi
Ảnh có tên phiên bảnCache dài hạnÍt thay đổi, có cache busting
HTML công khaiTTL ngắn, no-cache hoặc CDN cache có purgeCần thấy nội dung mới
API công khaiTheo độ tươi và hợp đồng dữ liệuKhông có một TTL chung
Trang theo người dùngprivate, thường kèm no-cache hoặc no-storeKhông chia sẻ response giữa người dùng

Kiểm cả browser cache và CDN cache. Header s-maxage có thể điều khiển shared cache khác với max-age cho trình duyệt. Header Vary cũng có thể làm cache key phân mảnh hoặc trộn sai biến thể nếu cấu hình thiếu.

Trọng số: Bắt buộc. Công cụ: Chrome DevTools, cURL, WebPageTest và Website Performance Test của Novaverb.

4. Phân loại response trước khi đặt thời gian cache

TTL phải đi sau việc phân loại khả năng thay đổi, mức riêng tư và cơ chế invalidation của từng response. Không nên sao chép cùng một header cho toàn bộ website chỉ vì một bài kiểm tra yêu cầu “cache lâu hơn”.

  1. Xác định response là tài nguyên tĩnh, HTML, API hay dữ liệu theo phiên.
  2. Xác định response có thể được dùng chung giữa nhiều người hay không.
  3. Xác định URL có đổi khi nội dung đổi hay không.
  4. Xác định lớp nào đang lưu: browser, CDN, reverse proxy hay plugin.
  5. Xác định cách purge hoặc revalidate khi dữ liệu thay đổi.
  6. Đặt TTL theo độ tươi chấp nhận được, không theo một con số chung.
  7. Kiểm response có Set-Cookie, Authorization hoặc Vary ảnh hưởng cache key không.

Một file app.8c72.css có thể cache một năm. Một URL /style.css bị ghi đè mỗi lần deploy thì không nên dùng immutable nếu chưa có versioning. HTML trang tin có thể cache vài phút ở edge và purge khi xuất bản, còn trang tài khoản cần tách khỏi shared cache.

Câu hỏi quyết định: nếu response cũ được dùng lại đến hết TTL, điều gì sẽ xảy ra và có cơ chế nào buộc URL hoặc cache entry đổi đúng lúc không?

5. Tiêu chí 125: Page Cache phía máy chủ

Trang công khai có thể cache nên được phục vụ từ page cache để tránh lặp lại toàn bộ chuỗi PHP, theme, plugin và database cho mỗi lượt xem. Tài liệu WordPress Advanced Administration Handbook về Cache giải thích plugin cache có thể lưu bài và trang thành file tĩnh để giảm tải xử lý phía máy chủ.

Page cache khác object cache. Page cache giữ HTML hoàn chỉnh; object cache giữ dữ liệu trung gian để WordPress vẫn render trang nhưng ít truy vấn hơn. Website có Redis không đồng nghĩa đã có full-page cache, và CDN lưu ảnh không đồng nghĩa đang cache HTML.

  • Cache trang bài viết, landing page, danh mục công khai và trang chủ nếu nội dung không cá nhân hóa.
  • Loại trừ /wp-admin/, đăng nhập và preview.
  • Loại trừ giỏ hàng, thanh toán, tài khoản và endpoint theo phiên.
  • Không cache response có dữ liệu người dùng chỉ bằng cách bỏ cookie khỏi giao diện.
  • Kiểm mobile và desktop có dùng cùng HTML hay cần biến thể cache key.
  • Kiểm query string nào được giữ, bỏ hoặc tạo cache entry riêng.

WP Rocket, LiteSpeed Cache hoặc lớp server cache có thể thực hiện page cache, nhưng bằng chứng phải là response thật: Age, X-Cache, CF-Cache-Status, X-LiteSpeed-Cache hoặc header tương đương. Tên header phụ thuộc stack.

Trọng số: Bắt buộc. Công cụ: WP Rocket, LiteSpeed Cache, Query Monitor, cURL và Server Response Time Checker của Novaverb.

6. Cách xác minh Cache HIT và TTFB giảm thật

Đo ít nhất một request lạnh và nhiều request ấm trong cùng điều kiện, rồi so median TTFB cùng trạng thái HIT, MISS hoặc BYPASS. Một request nhanh duy nhất có thể do route đã ấm, mạng thuận lợi hoặc response đang ở CDN gần vị trí đo.

curl -s -o /dev/null -D - https://example.com/bai-viet/
curl -s -o /dev/null -w "%{http_code} %{time_starttransfer}\n" https://example.com/bai-viet/
  1. Xóa hoặc bỏ qua browser cache để đo mạng rõ ràng.
  2. Gửi request đầu tiên và ghi trạng thái cache, TTFB, status code.
  3. Gửi lại ít nhất ba lần từ cùng vị trí.
  4. Dùng trung vị thay vì chọn lần có thời gian thấp nhất.
  5. Thử URL có cookie đăng nhập và URL ẩn danh.
  6. Thử trang được phép cache và trang bắt buộc bypass.
  7. Kiểm HTML của hai người dùng không bị trộn.

Mục tiêu là TTFB giảm rõ trên HIT và origin không phải tái tạo trang cho mọi request. Nếu header báo HIT nhưng TTFB vẫn cao, cần kiểm khoảng cách tới edge, TLS, worker tại CDN, response lớn hoặc chain redirect. Nếu TTFB nhanh nhưng header luôn MISS, cache key có thể bị phân mảnh bởi cookie hoặc query string.

7. Tiêu chí 126: Tối ưu tải Webfont

Chỉ tải font, weight và subset thật sự dùng; ưu tiên WOFF2, preload font quan trọng cho vùng đầu trang và chọn font-display theo trải nghiệm mong muốn. Font có thể bị phát hiện muộn vì trình duyệt phải tải CSS và dựng CSSOM trước khi biết biến thể nào cần dùng.

web.dev về tối ưu Webfont lưu ý preload cần dùng có chọn lọc, font là tài nguyên CORS nên preload thường cần crossorigin kể cả khi tự host. Preload quá nhiều weight làm chúng cạnh tranh với CSS, ảnh LCP và script quan trọng.

<link rel="preload" href="/fonts/site-regular.woff2"
 as="font" type="font/woff2" crossorigin>

@font-face {
 font-family: "Site Sans";
 src: url("/fonts/site-regular.woff2") format("woff2");
 font-weight: 400;
 font-style: normal;
 font-display: swap;
}
  • Dùng WOFF2 cho trình duyệt hiện đại.
  • Chỉ preload font xuất hiện chắc chắn trong viewport đầu.
  • Không preload mọi weight 300 đến 900.
  • Dùng variable font khi tổng payload thực sự nhỏ hơn các file tách.
  • Subset theo hệ chữ nhưng không làm thiếu ký tự tiếng Việt.
  • So metric của fallback để hạn chế dịch chuyển khi swap.
  • Cân nhắc optional khi ưu tiên tốc độ và chấp nhận giữ fallback trong lần tải đầu.

Trọng số: Quan trọng. Công cụ: Chrome DevTools, PageSpeed Insights và PageSpeed Checker của Novaverb.

8. Tiêu chí 127: Preconnect và DNS-prefetch đúng chỗ

preconnect chỉ nên dành cho origin bên thứ ba quan trọng chắc chắn được dùng sớm; dns-prefetch là gợi ý nhẹ hơn khi chỉ muốn phân giải DNS trước. Preconnect có thể thực hiện DNS, TCP và TLS trước khi request tài nguyên xuất hiện.

MDN về rel=preconnect cảnh báo preconnect tới quá nhiều domain có thể phản tác dụng. Kết nối không dùng vẫn tiêu tốn socket, CPU, TLS và băng thông cạnh tranh với tài nguyên quan trọng.

<link rel="preconnect" href="https://fonts.example-cdn.com" crossorigin>
<link rel="dns-prefetch" href="https://analytics.example.com">
Tình huốngGợi ýKhông nên làm
Font bên ngoài dùng ngay đầu trangPreconnect đúng origin và đúng CORS modeKhai báo domain stylesheet nhưng bỏ domain file font
Analytics tải sau consentDNS-prefetch hoặc không hint trước khi cầnPreconnect mọi nhà cung cấp marketing
Tài nguyên cùng originKhông cần preconnectPreconnect chính website đang mở
Video chỉ tải khi bấmKết nối sau tương tácMở kết nối từ đầu cho mọi embed

Trọng số: Nên có. Công cụ: Chrome DevTools Network, WebPageTest và Website Performance Test của Novaverb.

9. Tiêu chí 128: Phiên bản hóa tài nguyên tĩnh

URL của CSS, JavaScript, font hoặc ảnh phải thay đổi khi nội dung file thay đổi để cache dài hạn không giữ bản cũ. Có thể dùng content hash trong tên file, build hash trong manifest hoặc tham số phiên bản được cập nhật nhất quán.

/assets/app.8c72f1.css
/assets/site.4b109e.js
/fonts/site-regular.v3.woff2

wp_enqueue_style('theme', $url, [], '2026.09.06');

Content hash đáng tin hơn version viết tay vì URL chỉ đổi khi byte thực sự đổi. Tham số ?ver= vẫn có thể hoạt động với browser cache và nhiều CDN, nhưng cần kiểm CDN có giữ query string trong cache key không. Không dùng ngày hiện tại hoặc số ngẫu nhiên cho mọi request vì nó phá tái sử dụng cache.

  • Đổi URL khi nội dung đổi.
  • Giữ URL ổn định khi nội dung không đổi.
  • Đưa file mới lên trước khi HTML bắt đầu tham chiếu tới nó.
  • Giữ file hash cũ đủ lâu cho HTML cũ còn trong cache.
  • Không purge toàn CDN để bù cho quy trình versioning thiếu.
  • Kiểm service worker có cache riêng và cần nâng version không.

Trong WordPress, theme hoặc plugin có thể dùng phiên bản plugin làm version. Khi chỉnh CSS trực tiếp mà không tăng version, trình duyệt vẫn có thể giữ file cũ. Asset manifest của bundler giúp template đọc đúng tên hash thay vì ghép chuỗi thủ công.

Trọng số: Bắt buộc. Công cụ: Chrome DevTools, Asset Manifest, cURL và PageSpeed Checker của Novaverb.

10. Tiêu chí 129: Xác thực lại bằng ETag hoặc Last-Modified

Tài nguyên không immutable nên có validator như ETag hoặc Last-Modified để yêu cầu có điều kiện nhận 304 khi representation chưa đổi. Validator tiết kiệm payload nhưng vẫn có một lượt kết nối và kiểm tra với server. Vì vậy, revalidation không miễn phí và cần được đặt đúng nơi trong toàn bộ chiến lược cache của website.

MDN về ETag mô tả ETag là định danh cho một phiên bản cụ thể của tài nguyên. Client gửi lại If-None-Match; server trả 304 nếu phiên bản còn nguyên hoặc 200 với nội dung mới nếu đã đổi.

ETag: "33a64df5"
Last-Modified: Sat, 06 Sep 2026 02:30:00 GMT
Cache-Control: no-cache

If-None-Match: "33a64df5"
If-Modified-Since: Sat, 06 Sep 2026 02:30:00 GMT

ETag phải nhất quán giữa các node phục vụ cùng representation. Nếu mỗi origin sinh ETag khác nhau cho cùng byte, request qua load balancer sẽ liên tục nhận 200. CDN có thể biến đổi nén hoặc response và sửa ETag, vì vậy cần kiểm header người dùng cuối nhận được, không chỉ header tại origin.

  • Kiểm request lần hai có gửi If-None-Match hoặc If-Modified-Since.
  • Kiểm 304 không gửi lại toàn bộ body.
  • Kiểm ETag đổi khi nội dung đổi.
  • Không dùng validator để thay versioning cho asset immutable.
  • Kiểm Last-Modified không mới hơn thời gian response.

Trọng số: Quan trọng. Công cụ: Chrome DevTools, cURL, WebPageTest và Website Performance Test của Novaverb.

11. Tiêu chí 130: Purge Cache sau khi triển khai

Sau khi đổi nội dung, theme, plugin hoặc cấu hình, chỉ purge cache entry và lớp bị ảnh hưởng rồi xác minh response mới đã tới người dùng. Purge toàn bộ mọi lớp là thao tác dễ làm nhưng có thể tạo tải đột biến và làm mất lợi ích cache trên hàng nghìn URL không đổi.

Thay đổiPurge tối thiểu cần xem xétXác minh
Sửa một bài viếtURL bài, trang danh mục, sitemap hoặc feed liên quanTitle, nội dung và modified time mới
Đổi CSS có hashKhông cần purge asset cũ; cập nhật HTML tham chiếuHTML gọi đúng file hash mới
Đổi menu sitewideCác trang HTML dùng menu hoặc fragment cacheMẫu trang ở nhiều cache node
Đổi plugin cachePage cache, object cache theo hướng dẫn stackKhông còn entry không tương thích
Đổi API dữ liệuEndpoint và consumer cache liên quanSchema, status và payload mới

Quy trình deploy tốt tạo asset version mới trước, chuyển HTML sang URL mới, rồi dọn file cũ sau khi HTML cũ hết khả năng được dùng. Cách này tránh khoảng thời gian HTML đang sống trỏ vào file đã bị xóa.

Trọng số: Bắt buộc. Công cụ: CDN Dashboard, Cache Plugin, cURL và Server Response Time Checker của Novaverb.

12. Thứ tự purge khi WordPress có nhiều lớp Cache

Purge cần đi từ lớp tạo dữ liệu tới lớp phân phối dữ liệu và phải có kế hoạch làm ấm sau đó. Nếu chỉ xóa CDN nhưng page cache tại origin còn cũ, edge sẽ lấy lại đúng bản cũ. Nếu chỉ xóa page cache nhưng CDN còn HIT, người dùng chưa thấy thay đổi.

  1. Xác định nguồn sự thật đã cập nhật thành công.
  2. Xóa object hoặc fragment cache liên quan nếu dữ liệu trung gian đã đổi.
  3. Xóa page cache của URL và các trang tổng hợp phụ thuộc.
  4. Purge CDN cache theo URL, tag hoặc surrogate key.
  5. Cập nhật service worker cache nếu ứng dụng có dùng.
  6. Gửi request ẩn danh để làm ấm URL ưu tiên.
  7. Kiểm response header và nội dung từ ít nhất hai vị trí nếu CDN phân tán.
  8. Kiểm người dùng đăng nhập và giỏ hàng vẫn bypass đúng.

Nên ghi lại ai purge, thời điểm, lý do, phạm vi URL và kết quả xác minh. Đây là dữ liệu quan trọng khi một thay đổi chỉ xuất hiện ở vài thiết bị hoặc vài khu vực. Không dùng hard refresh trên máy cá nhân làm bằng chứng duy nhất.

Điều kiện dừng: phiên bản mới xuất hiện đúng ở cache công khai, trang riêng tư không bị cache và tỷ lệ lỗi hoặc tải origin không tăng bất thường.

13. Tiêu chí 131: Tái sử dụng kết nối với HTTP/2 và HTTP/3

Các request cùng origin nên tái sử dụng kết nối và tận dụng multiplexing của HTTP/2 hoặc HTTP/3 thay vì mở lại DNS, TCP và TLS cho từng file. HTTP/2 cho phép nhiều trao đổi đồng thời trên một kết nối; HTTP/3 dùng QUIC với nhiều stream và cơ chế thiết lập kết nối khác.

RFC 9113 về HTTP/2 nêu rõ HTTP/2 không dùng header Connection để báo metadata riêng cho kết nối. MDN về Connection cũng cảnh báo ConnectionKeep-Alive không được dùng trong HTTP/2 và HTTP/3.

  • Xem cột Protocol trong Network để phân biệt h2, h3 và HTTP/1.1.
  • Xem Connection ID hoặc remote address để nhận biết request có dùng chung kết nối.
  • Không thêm Connection: keep-alive như mẹo tối ưu cho h2 hoặc h3.
  • Kiểm redirect sang host khác có làm mở thêm kết nối không.
  • Kiểm chứng chỉ và DNS có cho phép connection coalescing khi phù hợp không.
  • Không chia asset sang nhiều subdomain theo mẹo domain sharding cũ nếu không có lý do đo được.

RFC 9114 về HTTP/3 mô tả QUIC hỗ trợ stream multiplexing, flow control theo stream và thiết lập kết nối độ trễ thấp. Tuy nhiên, hỗ trợ giao thức không tự làm trang nhanh nếu origin chậm, cache sai hoặc tài nguyên quá nặng.

Trọng số: Quan trọng. Công cụ: Chrome DevTools Network, WebPageTest, HTTP/2 Test của NovaverbHTTP/3 Test của Novaverb.

14. Tiêu chí 132: Giảm số nguồn kết nối

Mỗi origin mới có thể phát sinh DNS, kết nối, TLS, giới hạn ưu tiên riêng và thêm một bên thứ ba vào đường tải trang. Hợp nhất hợp lý font, ảnh, analytics và widget giúp trình duyệt tái sử dụng kết nối tốt hơn.

Nhóm originCâu hỏi giữ hay bỏCách giảm
FontCó cần tải bên ngoài không?Tự host font được cấp phép, giảm weight
AnalyticsDữ liệu có được dùng ra quyết định?Gom qua một container, bỏ tag trùng
Chat và widgetCó cần trước tương tác không?Tải sau consent hoặc sau khi người dùng mở
Ảnh và CDNCó bao nhiêu hostname phục vụ cùng loại asset?Chuẩn hóa CDN và URL
VideoEmbed có tải toàn bộ player ngay không?Dùng poster và facade trước khi bấm

Không đặt mục tiêu một origin tuyệt đối. CDN ảnh, cổng thanh toán hoặc video có thể cần domain riêng. Quyết định dựa trên waterfall, giá trị tính năng, quyền riêng tư, độ tin cậy và khả năng kiểm soát cache.

Hãy lập bảng origin theo template: domain, số request, byte, thời điểm bắt đầu, tổng main-thread work, owner và mục tiêu kinh doanh. Origin không có owner hoặc không ai đọc dữ liệu thường là ứng viên cần loại bỏ trước.

Trọng số: Quan trọng. Công cụ: Chrome DevTools Network, WebPageTest và Website Performance Test của Novaverb.

15. Tiêu chí 133: Làm ấm Cache và chống Cache Stampede

Sau purge, deploy hoặc khi entry hết hạn, URL ưu tiên nên được làm ấm và nhiều request đồng thời cho cùng một cache miss phải được điều phối. Nếu hàng trăm request cùng lúc đều chạy PHP và truy vấn database để tái tạo cùng một trang, cache trở thành nguyên nhân của đợt tải đột biến.

Tài liệu Nginx FastCGI cache mô tả fastcgi_cache_lock: chỉ một request được phép tạo cache entry mới, các request còn lại chờ kết quả hoặc timeout. Tên cơ chế khác nhau theo CDN, reverse proxy, plugin hoặc thư viện, nhưng nguyên tắc là request coalescing hoặc single-flight.

  • Làm ấm trang chủ, hub, landing page, bài có traffic và sitemap quan trọng.
  • Giới hạn tốc độ warm để không biến crawler nội bộ thành tải tấn công origin.
  • Dùng cache lock hoặc request coalescing cho key nóng.
  • Thêm jitter vào TTL để nhiều key không hết hạn cùng một giây.
  • Cân nhắc stale-while-revalidate hoặc stale-if-error khi tính đúng đắn cho phép.
  • Theo dõi HIT ratio, MISS, thời gian tái tạo, hàng đợi và tải database.
  • Không warm trang cá nhân hóa, giỏ hàng hoặc endpoint có side effect.

Warm cache không sửa được cache key sai. Nếu cookie tracking tạo một key mới cho mỗi người, bot warm chỉ làm nóng một biến thể. Trước hết phải chuẩn hóa key, loại cookie không cần và xác định biến nào thật sự làm response khác nhau.

Trọng số: Nên có. Công cụ: Cache Logs, APM, Load Test, Server Response Time Checker của NovaverbWebsite Performance Test của Novaverb.

16. Cấu hình Cache theo từng stack WordPress

Plugin, web server, CDN và hosting managed có thể cùng cache HTML; cần chọn một nguồn điều phối rõ thay vì bật mọi lớp với mặc định khác nhau. Hai lớp cache không xấu, nhưng purge, bypass và cache key phải thống nhất.

StackLớp thường gặpĐiểm cần kiểm
Apache hoặc Nginx và pluginPlugin page cache, browser cacheRewrite rule, file cache, purge khi cập nhật
LiteSpeed ServerLiteSpeed Cache tại server và plugin điều khiểnHIT header, exclusion, crawler warm
Nginx FastCGI CacheReverse proxy hoặc FastCGI page cacheCache lock, bypass cookie, purge URL
CDN Full Page CacheEdge HTML cache và origin cacheCache Rules, cookie, geographic variant
Managed WordPressCache độc quyền của nhà cung cấpPlugin tương thích, API purge, giới hạn cấu hình
WooCommerceCache công khai có exclusion theo phiênCart, checkout, account, currency và tồn kho

Không cài thêm plugin cache trước khi biết hosting đã cache gì. Một plugin có thể minify và browser cache nhưng page cache do host đảm nhiệm. Plugin khác có thể xóa origin cache nhưng không purge CDN. Hãy vẽ sơ đồ request thật và ghi owner cho từng lớp.

Query Monitor hữu ích để thấy truy vấn và hook khi trang bị BYPASS; header và TTFB cho biết hành vi khi HIT. Hai góc nhìn bổ sung nhau. Không dùng số query của một request đã page-cache để kết luận database đã tối ưu vì PHP có thể chưa chạy.

17. Thứ tự ưu tiên triển khai Cache và kết nối

Ưu tiên theo rủi ro sai dữ liệu trước, sau đó tới TTFB, cache hit, tài nguyên đầu trang và số origin. Một lỗi shared cache lộ nội dung cá nhân hóa nghiêm trọng hơn vài trăm mili giây tải font.

Ưu tiênViệcLý doĐiều kiện nghiệm thu
P0Loại trừ trang riêng tư và giao dịchBảo mật và tính đúng đắnKhông có HIT công khai khi đăng nhập hoặc checkout
P1Page cache trang công khaiGiảm TTFB và tải origin lớnHIT ổn định, TTFB giảm, nội dung đúng
P1Versioning và Cache-Control assetCho phép cache dài hạn an toànURL đổi khi byte đổi
P1Purge có phạm viĐảm bảo nội dung mới xuất hiệnĐúng URL, đúng lớp, không xóa toàn bộ tùy tiện
P2Font và resource hintsGiảm chờ render đầu trangKhông preload thừa, không thiếu glyph
P2Giảm origin, kiểm h2/h3Giảm handshake và tận dụng multiplexingWaterfall ít kết nối thừa hơn
P3Warm và chống stampedeỔn định khi purge hoặc traffic caoOrigin không tăng tải đột biến

Đừng triển khai tất cả trong một lần nếu chưa có giám sát. Mỗi thay đổi nên có một phép kiểm và rollback: cache rule, font preload, CDN hostname, protocol hoặc warm job. Cách này giúp biết cải thiện đến từ đâu và tránh lỗi chỉ xuất hiện khi cache đã ấm.

18. Quy trình Audit trước và sau tối ưu

Audit cần bao phủ cả cold cache, warm cache, người dùng ẩn danh, người dùng đăng nhập và nhiều loại template. Chỉ đo trang chủ ở một lần tải không đủ đại diện cho WordPress, cũng không phát hiện được lỗi bypass theo cookie hoặc template.

  1. Chọn mẫu: trang chủ, danh mục, bài viết, landing page, tìm kiếm, đăng nhập và trang giao dịch nếu có.
  2. Lưu status, TTFB, Cache-Control, Age, ETag, Last-Modified, Vary và cache status.
  3. Đo request lạnh, sau đó lặp ba đến năm request ấm.
  4. Kiểm HTML ẩn danh và HTML theo phiên không bị trộn.
  5. Xuất danh sách origin, protocol, connection ID và chi phí handshake.
  6. Kiểm font file, weight, preload, CORS và font-display.
  7. Kiểm URL asset có version và đổi khi build mới.
  8. Thử purge một URL và xác minh đúng chuỗi cache.
  9. Mô phỏng nhiều request sau purge trên staging hoặc môi trường an toàn.
  10. So median trước sau, HIT ratio, tải CPU, database và lỗi 5xx.
  11. Ghi điều kiện rollback nếu nội dung cũ hoặc sai người dùng xuất hiện.
  12. Đo lại sau deploy từ vị trí bên ngoài hệ thống.
Nhóm bằng chứngTrường cần lưu
ResponseURL, status, protocol, TTFB, header cache
CacheHIT, MISS, BYPASS, Age, key, TTL
ConnectionOrigin, DNS, connect, TLS, reused connection
FontFile, format, weight, preload, transfer size
DeployVersion, purge scope, warm list, thời điểm kiểm

Kết quả audit nên đủ để một người khác tái hiện cùng phép đo, nhận ra lớp nào tạo độ trễ và xác minh thay đổi có cải thiện mà không phục vụ sai dữ liệu. Nếu chưa làm được điều đó, báo cáo vẫn mới là ảnh chụp hiện trạng.

19. Công cụ, tài liệu gốc và lộ trình học tiếp

Công cụ nhanh giúp phát hiện header, giao thức và TTFB; DevTools, cURL, log và APM giúp truy nguyên tới đúng lớp cache hoặc kết nối. Kết quả tốt là cấu hình có thể giải thích và tái kiểm, không chỉ một ảnh chụp điểm số.

Công cụ Novaverb

Tài liệu gốc

Đọc lại SEO WordPress #13 về Core Web Vitals, SEO WordPress #14 về điểm PageSpeedSEO WordPress #15 về hình ảnh và code để nối cache với LCP, TTFB và đường kết xuất quan trọng.

Nếu muốn thực hành theo hệ thống trên website thật, có thể tham khảo chương trình đào tạo SEO, trang tổng hợp khóa học SEO và cấu trúc chuyên sâu của khóa học SEO Master. Các trang mô tả phạm vi và cách học để người đọc tự đối chiếu nhu cầu.

Chuỗi thực hành: phân loại response, đặt cache policy, kiểm HIT, version asset, purge có phạm vi, đo protocol và giám sát cache miss sau triển khai.

20. Câu hỏi thường gặp và kết luận

Các câu trả lời sau xử lý những nhầm lẫn thường gặp khi cấu hình cache và kết nối cho WordPress. Mục tiêu là nhanh hơn mà vẫn đúng dữ liệu, đúng người dùng, đúng thời điểm cập nhật và dễ vận hành khi nhiều lớp cache cùng tồn tại.

Có nên đặt cache một năm cho toàn bộ website không?

Không. Thời gian một năm phù hợp với tài nguyên tĩnh đã phiên bản hóa và không đổi tại cùng URL. HTML, API, dữ liệu riêng tư và trang giao dịch cần chính sách khác dựa trên độ tươi và mức chia sẻ.

no-cache có phải là không lưu Cache không?

Không. no-cache cho phép lưu nhưng yêu cầu xác thực lại trước khi tái sử dụng. no-store mới yêu cầu không lưu response. Hai chỉ thị giải quyết hai nhu cầu khác nhau.

Có Redis thì đã có Page Cache chưa?

Chưa chắc. Redis thường được dùng làm persistent object cache. Page cache giữ HTML hoàn chỉnh và có thể nằm ở plugin, web server, reverse proxy hoặc CDN. Cần kiểm response và cache status.

Vì sao purge Cache rồi vẫn thấy nội dung cũ?

Có thể còn cache ở lớp khác như CDN, page cache origin, object cache, browser hoặc service worker. Cũng có thể HTML mới vẫn tham chiếu asset cũ. Cần xác định chuỗi cache thay vì chỉ hard refresh.

Có nên preload tất cả Webfont không?

Không. Preload chỉ dành cho font chắc chắn cần sớm. Preload quá nhiều weight và style làm chúng cạnh tranh với CSS, ảnh LCP và tài nguyên quan trọng khác.

HTTP/3 có luôn nhanh hơn HTTP/2 không?

Không thể kết luận cho mọi mạng và mọi website. HTTP/3 có đặc tính kết nối và multiplexing của QUIC, nhưng hiệu quả thực tế còn phụ thuộc mạng, máy chủ, CDN, cache, payload và cách trang tải tài nguyên.

Có cần thêm Connection: keep-alive cho HTTP/2 không?

Không. Header ConnectionKeep-Alive là connection-specific và không được dùng trong HTTP/2 hoặc HTTP/3. Trình duyệt và giao thức tự quản lý kết nối theo cơ chế của chúng.

Cache warming có nên chạy toàn bộ Sitemap không?

Không mặc định. Hãy ưu tiên URL có traffic, hub, landing page và template quan trọng, giới hạn tốc độ và theo dõi tải origin. Warm toàn bộ site lớn sau purge có thể tự tạo traffic spike.

Kết luận: cache hiệu quả không nằm ở việc giữ mọi thứ lâu nhất. Nó nằm ở khả năng phân loại response, version tài nguyên, phục vụ page cache đúng trang, purge đúng phạm vi, tái sử dụng kết nối và bảo vệ origin khi cache lạnh. Khi từng lớp có chính sách và bằng chứng riêng, WordPress vừa nhanh hơn vừa ít rủi ro phục vụ sai dữ liệu.

Menu

Thêm vào màn hình chính

  1. 1 Bấm nút Chia sẻ ở thanh công cụ Safari
  2. 2 Kéo xuống, chọn Thêm vào MH chính
  3. 3 Bấm Thêm ở góc trên bên phải

Ba bước này là của Safari. Nếu đang xem trong ứng dụng khác thì bấm mở bằng Safari trước đã.