Cái đêm tôi hoảng vì điểm đỏ — và câu hỏi làm tôi tỉnh ra
Tháng 7/2026. Gần nửa đêm. Tôi gõ địa chỉ web của mình vào Google PageSpeed Insights — cái công cụ Google dùng để chấm điểm tốc độ web. Chọn bản mobile. Bấm.
Màn hình bật ra một con số đỏ lòm: 60.
Tim tôi thắt lại.
Tôi kéo xuống. Dòng LCP — nói cho dễ hiểu là “cái ảnh to nhất trên trang phải mất bao lâu mới hiện xong” — ghi 24,7 giây.
Hai mươi bốn giây.
Bạn thử hình dung: một người khách bấm vào web tôi, rồi ngồi đếm tới hai mươi bốn mới thấy tấm ảnh. Ai mà đợi. Đợi làm gì. Speed Index 9,5 giây. FCP — giây phút chữ đầu tiên hiện ra — 2,9 giây. Cả trang nặng gần 4,7MB, riêng đống ảnh đã ngốn 4MB.
Tôi mở nốt web thứ hai, mylina.vn. Khá hơn tí: 75 điểm, LCP 4,4 giây, CLS 0,17 — cái độ giật, nhảy chữ khi trang đang tải. Nhưng vẫn đỏ. Vẫn bị chấm là “kém”.
Cảm giác lúc đó, chắc bạn từng có. Web chậm là mất khách. Điểm đỏ là mất mặt. Đầu tôi đã nhẩm: hay gọi một bên kỹ thuật, chi vài triệu thuê người ta tối ưu cho xong chuyện?
Tôi suýt gọi thật. Suýt rút ví.
Nhưng rồi tôi làm một việc quê mùa: móc cái điện thoại trong túi ra, mạng 4G bình thường như mọi khách của tôi, gõ vào web mình.
Nó hiện lên. Một cái chớp mắt.
Tôi ngồi thừ ra ghế. Máy của Google bảo hai mươi bốn giây. Điện thoại trong tay tôi bảo tức thì. Vậy rốt cuộc, con số kia đang nói thật với ai?
Và thủ phạm kéo tụt web tôi hoá ra là một thứ bé xíu, nằm chình ình ngay trên đầu trang — nhỏ đến mức ngày nào tôi cũng nhìn mà chẳng mảy may nghi ngờ. Để tôi kể bạn nghe.
Điểm PageSpeed là số đo trong phòng thí nghiệm, không phải khách của bạn
Tôi kể bạn nghe cái làm tôi thở phào một cái nhẹ cả người.
Con số 60 của hoang.com.vn, con số 75 của mylina.vn — nó không đo tốc độ khách của tôi. Nó đo tốc độ trong một cái phòng thí nghiệm. Mà phòng đó thì tôi có bao giờ mời khách vào đâu.
Nghĩa là sao? Bạn bấm nút chạy PageSpeed bản mobile, Google không móc điện thoại của khách bạn ra đo. Nó dựng lên một chiếc điện thoại yếu xìu, bóp băng thông xuống mức “Slow 4G” cho thật ì ạch, rồi đo từ một máy chủ nằm tận đẩu tận đâu, không phải Việt Nam. Giống như bạn muốn biết xe mình chạy nhanh không, mà người ta lôi nó ra một con đường lầy lội ở nước ngoài để thử. Đường đó khách bạn có đi ngày nào đâu.
Và có một dòng chữ nằm chình ình trên báo cáo mà lúc đầu tôi lướt qua chẳng buồn để ý: “Discover what your real users are experiencing: No Data”. Dịch mộc ra: “Dữ liệu người dùng thật của bạn à? Chưa có đâu.” Google nói thẳng vào mặt rồi đấy — nó chưa gom đủ số của người thật (dân trong nghề gọi là field data, hay CrUX). Cái điểm 60, 75 kia chỉ là mô phỏng. Số phòng lab. Không phải cảm giác của người vừa mở web bạn lên.
Đây mới là chỗ ai lo SEO cần dỏng tai lên: Google xếp hạng bằng trải nghiệm người thật, không xếp bằng điểm lab. Mấy chữ viết tắt kia, hiểu nôm na thôi — FCP là giây chữ đầu tiên hiện ra, TBT là lúc trang “đơ” bấm không nhả, TTFB là máy chủ mất bao lâu để nhả byte đầu tiên.
Server đặt tại Việt Nam, khách cũng ở Việt Nam. Byte đi một quãng ngắn tũn. Vào gần như tức thì.
Bạn hiểu tôi muốn nói gì chưa? Điểm lab đỏ lè không có nghĩa khách của bạn đang khổ. Họ đang lướt ngon lành, còn bạn thì ngồi ôm đầu hoảng vì một con số đo hộ cho người khác. Trước khi đốt tiền tối ưu, hãy hỏi một câu: mình đang chữa cho khách, hay đang chữa cho cái máy đo?
Đi bắt thủ phạm: cái logo 40×40 pixel mà nặng gần 4 megabyte
Biết web nặng rồi. Câu hỏi tiếp theo: nặng ở chỗ nào?
Tôi xắn tay đi tìm. Mà bạn biết cái cảm giác đi soi thủ phạm trong chính nhà mình không? Vừa tò mò, vừa hơi chột dạ vì sợ cái mình sắp thấy.
Mở mylina.vn ra soi trước. Trang chủ có mấy tấm ảnh to đùng đập vào mắt đầu tiên — dân trong nghề gọi là ảnh “hero”. Ảnh “Bác sĩ Vương và khách hàng”. Nhìn thì đẹp thật. Bấm vào xem dung lượng: 5–6MB một tấm. MỖI tấm. Tôi ngồi đếm mà thấy xót. Mấy tấm cộng lại thành một cục nặng trịch, đè lên đường truyền của khách ngay lúc họ vừa chạm vào.
Vì sao nặng thế? Vì mấy tấm ảnh chụp đó bị lưu dưới định dạng PNG. Mà PNG sinh ra là để cho logo, cho hình đồ hoạ nét căng, chữ sắc cạnh — chứ đâu phải cho ảnh chụp. Nhét ảnh chụp vào PNG chẳng khác gì mặc áo mưa đi tắm biển. Vẫn được. Nhưng phí và nặng nề vô lý.
Xong mylina, tôi quay sang hoang.com.vn. Đây mới là chỗ tôi phải bật cười vì chính mình.
Cái nặng nhất trang không phải ảnh bài viết. Không phải banner. Mà là… cái LOGO trên đầu trang. Một file PNG 3,8MB.
Bạn đọc lại giùm tôi con số đó. Ba phẩy tám megabyte. Cho một cái logo hiện ra chừng 40×40 pixel — bé bằng cái móng tay trên màn hình điện thoại. Nó ngốn băng thông ngay giây đầu tiên, trước khi khách kịp đọc một chữ nào. Cái thứ nhỏ xíu tôi nhá với bạn ở đầu bài — chính là nó đấy.
Tôi ngồi nhìn nó mà vừa buồn cười vừa ngượng chín mặt. Bao nhiêu năm trong nghề, vẫn để một cái logo ngồi hút băng thông của khách ngay từ giây đầu.
Biết thủ phạm rồi. Nhưng chữa có tốn tiền không? Đây mới là chỗ bất ngờ.
Vũ khí thật: chuyển ảnh sang WebP bằng công cụ có sẵn (không tốn một xu)
Bắt được thủ phạm rồi. Giờ tới màn chữa. Và đây là chỗ tôi đoán bạn đang nín thở: “Chắc phải thuê agency, phải mua plugin bản quyền, phải móc ví chứ gì?”
Không. Một xu cũng không.
Vũ khí của tôi tên là WebP. Nói cho dễ hiểu: nó là định dạng ảnh đời mới, nén giỏi hơn JPG và PNG từ 30 đến 80%. Nghĩa là cùng một tấm ảnh, mắt thường nhìn gần như y hệt, nhưng file nhẹ đi một nửa, có khi hơn. Ảnh vẫn nét. Chỉ là nó thôi phình ra vô lý.
Còn công cụ để nén? Nó nằm sẵn trên chính máy chủ của bạn rồi — mấy thư viện tên imagick với GD, hosting nào cũng có. Tôi không mua dịch vụ ngoài nào hết. Chỉ bảo máy chủ một câu: “Ê, mấy tấm ảnh này, đẻ thêm cho tôi bản WebP đi.” Xong.
Phần tôi mê nhất là cái cơ chế thông minh phía sau. Vẫn đường link ảnh .jpg cũ, không đổi một chữ. Điện thoại đời mới của khách tự động nhận bản .webp nhẹ tênh. Máy nào cũ, trình duyệt cũ, thì nhận đúng ảnh gốc như xưa. Không ai vỡ ảnh, không ai thấy ô trắng. Khách chẳng cần biết gì hết. Họ chỉ thấy web hiện nhanh hơn. Vậy thôi.
Giờ tới mấy con số. Tôi để nguyên số lẻ cho bạn tin đây là đo thật, không phải tôi làm tròn cho đẹp:
- mylina.vn: 5.616 tấm ảnh, từ 168MB tụt còn 92,5MB. Giảm 45%.
- hoang.com.vn: 306 tấm, từ 40MB còn 20,8MB. Giảm 48%.
- Cái logo 3,8MB khét tiếng ở phần trước? Xuống còn 95KB. Giảm 97,5 phần trăm. Bạn đọc lại đi — chín mươi bảy phẩy năm.
- Ảnh trang chủ hoang.com.vn giảm 77% (700KB còn 159KB), mylina.vn giảm 61% (543KB còn 209KB).
- Tấm hero “Bác sĩ Vương và khách hàng”: 131KB còn 41KB.
Nhìn con số mà sướng. Khách vào bằng 4G tốn chưa tới nửa dung lượng cũ, ảnh bung ra trước cả khi họ kịp chớp mắt.
Tưởng xong rồi phải không?
Chưa. Tôi suýt bỏ cuộc ba lần — vì ba cái bẫy mà không một ai chịu nói trước cho tôi.
Ba cái bẫy khiến bạn tưởng mình làm sai (tôi vấp cả ba)
Tôi kể thật nhé. Nén ảnh xong, tôi hí hửng mở PageSpeed lên đo lại. Chờ một cú nhảy vọt.
Điểm y nguyên.
Tim thắt lại một cái. “Ơ, mình làm sai à?” Không. Tôi chỉ đang giẫm phải đúng cái bẫy mà — sau này mới biết — hàng ngàn người trước tôi đã bỏ cuộc ở đó.
Bẫy thứ nhất: bật “tải ảnh trễ” cho tất cả. Lazy-load, nói mộc, là “khoan tải ảnh nào chưa lọt vào tầm mắt, cho trang mở nhẹ hơn”. Nghe hay. Nhưng tôi bật cho TẤT CẢ — kể cả cái logo, kể cả tấm hero to đùng ngay đầu trang. Thế là trình duyệt khoan luôn cái ảnh lớn nhất mà khách nhìn thấy đầu tiên. LCP (giây phút khối nội dung lớn nhất hiện xong) không nhanh hơn, mà chậm đi. Buồn cười chưa: tôi tự nén ảnh cho nhẹ, rồi tự bảo trình duyệt đừng vội tải nó. Cách chữa: lôi mấy tấm ở màn hình đầu ra khỏi danh sách lazy-load. Cái gì khách thấy ngay thì tải ngay.
Bẫy thứ hai: quên xoá cache. Đây mới là thủ phạm khiến điểm “y nguyên”. LiteSpeed Cache — hiểu nôm na là cái kho giữ sẵn một bản trang cũ để nhả cho nhanh, khỏi dựng lại từ đầu. Tôi chỉnh cấu hình chán chê, nó vẫn bê nguyên bản cũ ra đo. Phải bấm “purge” — xoá cache, ép nó dựng lại bản mới — con số mới chịu động đậy. Rất nhiều người dừng đúng đây, tưởng công cốc. Không đâu. Bạn chỉ đang soi cái ảnh cũ trong gương thôi.
Bẫy thứ ba: tưởng bật cache là xong. Tôi mở phần cài đặt ra và ngã ngửa: cache trang thì bật đấy, nhưng nén CSS/JS, hoãn JS, tải font không chặn — TẮT sạch. Như tậu xe xịn mà quên đổ xăng. Bật đủ lên, điểm nhích thấy rõ.
Ba cú vấp, ba bài học. Nhưng cú đau nhất chưa tới — nó đến đúng lúc tôi cố tỏ ra pro.
Cú tôi bật CDN ‘cho pro’ — và khi nào CDN mới đáng tiền cho web ở Việt Nam
Nghịch ảnh xong, điểm mylina.vn với hoang.com.vn đã đẹp lên trông thấy. Lẽ ra tôi nên dừng.
Nhưng máu “cho nó pro” lại nổi lên.
Tôi nghe người ta khen CDN suốt. CDN — mạng phân phối nội dung — tức là đặt máy chủ ở nhiều nơi trên khắp thế giới, khách ở đâu thì kéo dữ liệu từ máy gần đó cho nhanh. Nghe sang lắm. Nghe là thấy “chuyên nghiệp” rồi. Tôi bật ngay Cloudflare cho hoang.com.vn, gạt đám mây từ xám sang cam (dân kỹ thuật gọi là grey-cloud với orange-cloud — tắt và bật cái proxy đứng chắn giữa khách và web của bạn).
Bật xong, tôi hí hửng đo lại.
Tim hụt một nhịp. Điểm TỤT từ 75 xuống 67. FCP — giây phút chữ đầu tiên hiện ra — từ 3,0 giây leo lên 3,9. LCP vọt lên 5,6 giây. Càng “pro” càng chậm. Tôi ngồi ngẩn ra.
Rồi tôi hiểu.
Máy chủ của tôi đặt ở Việt Nam. Khách của tôi cũng ở Việt Nam. Khách gõ web, dữ liệu chạy một đoạn ngắn xíu là tới nơi. Vậy mà tôi nhét một CDN toàn cầu vào giữa — khách phải vòng qua một trạm trung chuyển của Cloudflare (có khi tận Singapore) rồi mới quay về. Tự dưng đẻ thêm một khúc đường vòng. Nhanh sao nổi.
Tôi gỡ ngay. Điểm về lại chỗ cũ.
Bài học tôi ghim vào đầu: CDN không phải phép màu, nó là một cái công cụ. Nó chỉ đáng tiền khi khách của bạn rải KHẮP thế giới — người Mỹ, người Úc, người châu Âu cùng vào một lúc. Còn nếu bạn bán cho người Việt, máy đặt ở Việt Nam, thì đừng đua đòi. Cái bạn cần đơn giản thôi: máy chủ gần khách, nhả chữ thật nhanh.
Nhanh cỡ nào? Tôi đo TTFB của hoang.com.vn — thời gian máy chủ nhả ra byte chữ đầu tiên — ngay trong nước: 0,03 giây. Ba phần trăm của một giây. Đó mới là con số nói lên khách của tôi đang sướng hay đang khổ.
Vậy rốt cuộc, nên đo cái gì?
Vậy nên tối ưu tốc độ website cái gì cho khách THẬT của bạn?
Đi qua bấy nhiêu con số rồi, giờ tôi gói lại cho bạn. Ba việc. Chỉ ba thôi. Làm xong là khách của bạn cảm nhận được ngay, không cần đợi Google chấm điểm.
Một — làm ảnh và trang nhẹ đi. Đòn bẩy to nhất, dễ nhất, không mất một xu. Chuyển ảnh sang WebP (định dạng nén hiện đại, nhẹ hơn PNG/JPG mà mắt thường gần như không thấy khác). Khách bạn cầm điện thoại, xài 4G — trang nhẹ thì hiện gần như tức thì. Nhớ cái logo của tôi chứ? 3,8MB rớt xuống 95KB. Một cái logo 40×40 pixel mà từng nặng gần 4 megabyte. Bạn cũng đang có một “cái logo 3,8MB” nằm đâu đó. Tôi cá đấy.
Hai — máy chủ gần khách. Web tôi đặt ở Việt Nam, khách cũng ở Việt Nam. TTFB — thời gian máy chủ nhả chữ đầu tiên — đo ngay trong nước: 0,03 giây. Ba phần trăm của một giây. Đó mới là con số đáng khoe. Không phải cái điểm PageSpeed đo từ máy chủ Google tận đâu đâu.
Ba — đừng để một file khổng lồ chặn cả trang. Một tấm ảnh 6MB, một đoạn script nặng nằm chình ình trên đầu — thế là đủ giữ chân cả trang lại, bắt khách ngồi nhìn màn hình trắng.
Còn con số ảo nên bỏ? hoang.com.vn của tôi lên 75 là tôi dừng. Cố ý. FCP quanh 3 giây là cái “sàn” của mạng chậm mô phỏng — muốn phá tiếp phải cắt critical-CSS (tách riêng phần CSS tối cần thiết để vẽ màn hình đầu), dễ làm chữ nhấp nháy, lợi bất cập hại. Điểm số chỉ để tham khảo. Khách của bạn mới là quan tòa.
Giờ tới lượt bạn. Tối nay, mở web bằng chính điện thoại của bạn, ngồi ở Việt Nam mà xem. Tìm tấm ảnh hoặc cái logo nặng nhất — “cái logo 3,8MB của riêng bạn” — nén xuống WebP trước. Đừng đụng CDN vội. Rồi kéo xuống đây kể tôi nghe: web bạn mấy điểm, thủ phạm nặng nhất là gì? Tôi từng đứng đúng chỗ hoảng đó. Tôi đọc hết, từng bình luận một.
Nếu bạn ngại kỹ thuật — đưa nguyên đoạn này cho Claude Code
Tôi biết có bạn đọc tới đây rồi gật gù: “Hiểu rồi đấy, nhưng tôi có biết vọc server đâu.” Không sao. Bạn không cần biết code. Bạn chỉ cần một trợ lý biết code.
Nói thật với bạn: cả cái đống việc trong bài này — soi thủ phạm, nén ảnh WebP, chỉnh cache, né mấy cái bẫy — tôi không ngồi gõ từng dòng lệnh khô khan. Tôi nhờ Claude Code (một trợ lý lập trình chạy bằng AI) làm cùng, tôi chỉ ra lệnh bằng tiếng Việt. Bạn cũng làm được y hệt. Mở Claude Code lên, dán nguyên khối dưới đây vào, thay địa chỉ web của bạn:
Website WordPress của tôi là [DÁN ĐỊA CHỈ WEB] đang chạy chậm, điểm PageSpeed thấp. Hãy giúp tôi tối ưu TỐC ĐỘ THẬT cho khách của tôi, đừng chạy theo điểm ảo:
1. Đo tốc độ thật (TTFB) và chạy PageSpeed, chỉ cho tôi thủ phạm nặng nhất: ảnh, script hay file lớn nào đang chặn trang.
2. Tìm mọi ảnh PNG/JPG nặng trong thư mục uploads và chuyển sang WebP bằng công cụ có sẵn trên server (imagick/GD), giữ nguyên đường link cũ, dùng cơ chế fallback để trình duyệt cũ không vỡ ảnh.
3. Bật cache đúng cách: nén CSS/JS, hoãn JS, tải font không chặn render — NHƯNG loại ảnh hero/logo ở màn hình đầu ra khỏi lazy-load để không làm chậm LCP.
4. Sau mỗi thay đổi, purge (xoá) cache rồi mới đo lại — đừng để tôi tưởng mình làm sai.
5. ĐỪNG tự bật CDN toàn cầu nếu khách và máy chủ của tôi đều ở Việt Nam. Giải thích cho tôi khi nào CDN mới thật sự đáng.
Làm từng bước, giải thích bằng ngôn ngữ đời thường, và cho tôi số liệu before/after ở mỗi bước.
Nó sẽ tự đo, tự tìm thủ phạm, tự nén ảnh — và giải thích cho bạn từng bước bằng tiếng người, không phải tiếng máy. (Nó cần bạn cho quyền vào hosting, qua SSH hoặc plugin quản lý.)
Còn nếu đọc xong bạn vẫn thấy ngại, chỉ muốn có người làm cho xong xuôi — thì bạn biết tìm tôi ở đâu rồi đấy.
Vi Tiến Hoàng — làm Internet Marketing từ 2013, 8 năm đồng hành cùng Phạm Thành Long, góp phần đưa một kênh YouTube từ 0 lên 1.000.061 người đăng ký, hiện là Giám đốc MYLINA Group. Tất cả số liệu trong bài này là tôi tự tay làm, tự tay đo trên chính hai website của mình — hoang.com.vn và mylina.vn — trong tháng 7/2026.
Câu hỏi thường gặp (FAQ)
Điểm PageSpeed thấp có làm tôi bị Google phạt SEO không?
Không. Tôi cũng từng đinh ninh vậy, thức đêm vì con 60 đỏ lè. Nhưng Google xếp hạng bằng field data — Core Web Vitals đo từ khách THẬT của bạn (gọi là CrUX), chứ không phải con số mô phỏng trong phòng lab. Web bạn còn dòng “No Data” nghĩa là Google còn chưa chấm bạn bằng dữ liệu thật. Con 60, 75 kia chỉ để tham khảo. Đừng để nó dọa.
Chuyển ảnh sang WebP có làm vỡ hay mờ ảnh không?
Không. WebP nén khéo tới mức mắt thường gần như chịu, không phân biệt nổi. Tôi nén 5.616 tấm của mylina.vn, chẳng ai kêu một tiếng. Lại có cửa lui: máy đời mới nhận bản .webp nhẹ tênh, máy cũ vẫn nhận ảnh gốc. Không ai vỡ ảnh cả.
Tôi mù kỹ thuật, bắt đầu từ đâu?
Ba việc, đúng thứ tự. Một: nén ảnh về WebP — nhắm tấm nặng nhất mà bóp trước, y như cái logo 3,8MB của tôi. Hai: bật đủ các tính năng cache (nén CSS/JS, hoãn JS, tải font không chặn), đừng bật mỗi cache trang rồi tưởng xong. Ba, cái ai cũng quên: purge cache sau mỗi lần đổi. Quên xoá thì đo lại thấy y nguyên, rồi tự trách mình làm sai.
Có nên bật CDN cho website của tôi không?
Tuỳ khách bạn ở đâu. Máy chủ đặt tại Việt Nam, khách cũng người Việt, thì bật CDN toàn cầu vào chỉ đẻ thêm đường vòng — tôi bật thử, điểm tụt từ 75 xuống 67, phải gỡ ngay. CDN chỉ đáng tiền khi khách của bạn rải khắp thế giới. Bán cho người Việt thì máy gần khách là đủ.
Có nên thuê agency tối ưu tốc độ không?
Đáng — khi web có bệnh thật: ảnh 5–6MB một tấm, máy chủ nhả chữ rề rà. Không đáng — khi bạn chỉ cày một con điểm ảo cho đẹp mặt. Và ai hứa “tăng 300% doanh thu” thì bỏ ngoài tai. Khách của bạn mới là quan tòa, không phải cái đồng hồ đo.

