CSS không dùng thường chiếm 70-90% dung lượng CSS trong theme WordPress. Bài hướng dẫn 5 bước loại bỏ 2026: audit Coverage tab, PurgeCSS, plugin WordPress, quy tắc ngoại lệ và đo kết quả cho shop bán hàng.
CSS không dùng — vấn đề và quy mô
Theme WordPress cao cấp (Astra Pro, Flatsome, Avada) đóng gói CSS 200-500KB để hỗ trợ mọi tính năng. Site thực tế chỉ dùng 10-30% — phần còn lại vẫn được tải và phân tích cú pháp, làm chậm hiển thị.
Vì sao CSS không dùng phổ biến?
- Theme đóng gói đầy đủ: 50+ biến thể thành phần giao diện.
- Plugin enqueue CSS riêng cho trang quản trị nhưng lại tải cả ở giao diện người dùng.
- WooCommerce CSS tải mọi trang, kể cả trang không có shop.
- Bootstrap hoặc Foundation full bundle 150-250KB.
- FontAwesome icon library 70KB nhưng chỉ dùng 5-10 icon.
CSS không dùng ảnh hưởng hiệu năng thế nào?
Trình duyệt tải và phân tích toàn bộ CSS trước khi hiển thị trang. CSS không dùng làm tăng thời gian phân tích CSSOM — ảnh hưởng trực tiếp đến FCP và LCP.
CSS chặn hiển thị (render-blocking CSS) là một trong những nguyên nhân phổ biến nhất gây FCP kém. Xem thêm trong bài Critical CSS — tối ưu CSS quan trọng.
Bước 1 — Audit qua Chrome DevTools Coverage
Tab Coverage trong DevTools hiển thị tỷ lệ phần trăm CSS được dùng cho trang hiện tại. Cách nhanh nhất phát hiện CSS không dùng mà không cần công cụ bổ sung.
Quy trình audit
- Mở Chrome DevTools (F12).
- Ctrl+Shift+P (Windows) → tìm “Coverage”.
- Tab “Coverage” mở → bấm nút ghi (record).
- Reload trang → chờ tải xong, cuộn xuống để trigger lazy load.
- Bấm dừng ghi.
- Xem danh sách file CSS với tỷ lệ đã dùng. Thanh đỏ = phần không dùng.
Đọc báo cáo Coverage
| File CSS | Tổng | Không dùng | Hướng xử lý |
|---|---|---|---|
| theme.css | 180KB | 120KB (66%) | PurgeCSS |
| woocommerce.css | 95KB | 78KB (82%) | Tải có điều kiện |
| elementor.css | 140KB | 110KB (78%) | Tắt trên trang không dùng builder |
| fontawesome.css | 72KB | 68KB (94%) | Thay bằng SVG inline |
Kiểm tra nhiều trang, không chỉ trang chủ
Trang chủ thường dùng nhiều component hơn trang trong. Audit trang sản phẩm, trang danh mục, checkout riêng — mỗi trang có tỷ lệ CSS không dùng khác nhau.
Bước 2 — PurgeCSS quét và loại bỏ
PurgeCSS quét template HTML/JS, xác định class CSS không được tham chiếu, xuất file CSS chỉ chứa class đang dùng. Công cụ chuẩn 2026 cho dự án có build pipeline.
PurgeCSS với PostCSS
// postcss.config.js
const purgecss = require('@fullhuman/postcss-purgecss');
module.exports = {
plugins: [
purgecss({
content: [
'./src/**/*.html',
'./src/**/*.js',
'./templates/**/*.php', // template WordPress
],
defaultExtractor: content =>
content.match(/[w-/:]+(?<!:)/g) || [],
safelist: {
standard: ['html', 'body'],
deep: [/^wp-/, /^wc-/], // class WordPress + WooCommerce động
greedy: [/^has-/, /^is-/], // class trạng thái
},
}),
],
};
Kết quả tham chiếu khi dùng PurgeCSS
- Bootstrap 150KB: sau PurgeCSS còn 15-25KB tùy số component dùng.
- Tailwind v2 raw 3MB: sau PurgeCSS còn 8-15KB. Tailwind v3 JIT tự purge — không cần làm thêm.
- Theme tùy chỉnh 200KB: thường còn 60-80KB sau khi loại bỏ.
PurgeCSS giới hạn
PurgeCSS chỉ quét template tĩnh tại thời điểm build. Class được thêm động qua JavaScript sẽ bị xóa nhầm.
Cần safelist cho những class này (ví dụ: document.body.classList.add('modal-open')).
Bước 3 — Plugin WordPress tự động loại bỏ
WP Rocket có tính năng “Remove Unused CSS” quét từng URL, tạo ra tập hợp CSS tối thiểu chỉ chứa class đang dùng. Thiết lập 1 click, không cần build pipeline.
WP Rocket Remove Unused CSS — thiết lập
- Settings → File Optimization → tab CSS.
- Tick “Remove Unused CSS”.
- Chờ 5-15 phút — plugin quét toàn site, tạo CSS tối ưu cho từng template.
- Xác minh qua View Source:
<style id="wpr-usedcss-...">inline với tập hợp CSS tối thiểu. - Test toàn site: trang chủ, sản phẩm, checkout, tìm kiếm → style bị hỏng?
- Nếu bị hỏng: thêm class vào “Excluded CSS Selectors” trong cài đặt plugin.
Lựa chọn thay thế miễn phí
- Asset CleanUp: bỏ enqueue CSS không dùng theo từng trang — mức độ thô, không theo class.
- Perfmatters: $24.95/năm, có tính năng Remove Unused CSS.
- FlyingPress: $42/năm, tích hợp nhiều tính năng hiệu năng.
Tải CSS có điều kiện trong WordPress
Cách thủ công hiệu quả: chỉ enqueue CSS khi cần. Ví dụ trong functions.php:
// Chỉ tải WooCommerce CSS trên trang shop
if ( ! function_exists( 'is_woocommerce' ) ) {
return;
}
add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );
// Sau đó enqueue CSS tuỳ chỉnh chỉ trên trang WC
add_action( 'wp_enqueue_scripts', 'my_wc_styles' );
function my_wc_styles() {
if ( is_woocommerce() || is_cart() || is_checkout() ) {
wp_enqueue_style( 'my-wc', get_template_directory_uri() . '/css/wc.css' );
}
}
Bước 4 — Quy tắc ngoại lệ và safelist
PurgeCSS và WP Rocket hoạt động chặt — đôi khi xóa nhầm class được thêm động qua JavaScript. Cần safelist để giữ lại những class này.
Class cần safelist phổ biến
- Class trạng thái: .active, .open, .show, .hidden, .is-loading.
- WordPress động: .wp-, .wc-, .menu-item-, .post-, .page-.
- Class thêm bằng JS: .modal-open, .has-tooltip, .scrolled.
- Class animation: .fade-in, .slide-up, .animate-.
- Kiểm tra dữ liệu nhập form: .invalid, .valid, .has-error.
Safelist bằng regex
safelist: {
standard: ['active', 'open', 'modal-open'],
deep: [/^wp-/, /^wc-/, /^menu-item/, /^post-/, /^page-/],
greedy: [/^has-/, /^is-/, /^fade/, /^slide/, /^animate-/],
};
Phát hiện class động bị xóa nhầm
Sau khi bật Remove Unused CSS, test kỹ từng tính năng động: modal, tooltip, slider, filter AJAX, form validation. Mở Console F12 — nếu class không tìm thấy trong CSS đã tối ưu, thêm vào safelist.
Bước 5 — Đo kết quả trước/sau
Đo thực tế bằng DevTools tab Network trước và sau khi bật Remove Unused CSS. Mức giảm phụ thuộc vào theme và mức độ CSS không dùng ban đầu — theme nặng sẽ thấy cải thiện rõ hơn.
Cách đo trước/sau
- Mở DevTools → tab Network → lọc CSS.
- Reload trang → ghi lại tổng Transfer Size của CSS.
- Bật Remove Unused CSS → xóa cache → reload lại.
- So sánh Transfer Size — tính % giảm thực tế.
- Chạy PSI trước/sau để xem tác động lên FCP và điểm tổng thể.
Cải thiện kỳ vọng theo loại theme
- Theme page builder nặng (Avada, Divi): CSS ban đầu 300-500KB, thường còn 80-150KB sau tối ưu.
- Theme nhẹ (GeneratePress, Blocksy): CSS ban đầu 50-100KB, cải thiện ít hơn nhưng site đã nhẹ.
- Bootstrap full bundle: 150KB → 15-25KB tùy số component thực sự dùng.
Checklist loại bỏ CSS không dùng cho shop VN
- Audit Coverage trên trang sản phẩm bán chạy — không chỉ trang chủ.
- Xác định file CSS nào chiếm tỷ lệ không dùng cao nhất — ưu tiên xử lý đó trước.
- Với site có build pipeline: cấu hình PurgeCSS trong PostCSS.
- Với WordPress không build: dùng WP Rocket Remove Unused CSS hoặc Asset CleanUp.
- Đặt safelist cho class WordPress/WooCommerce động trước khi kích hoạt.
- Test kỹ modal, dropdown, AJAX filter, checkout sau khi bật.
- Kết hợp tải CSS có điều kiện: WooCommerce CSS chỉ tải trên trang shop.
- Cân nhắc thay FontAwesome bằng SVG inline nếu chỉ dùng ít icon.
- Đo Coverage lại sau khi tối ưu — xác nhận tỷ lệ không dùng đã giảm.
- Kết hợp với nén JS/CSS để giảm thêm dung lượng.
Bài liên quan trong cluster Performance
- Critical CSS — inline CSS quan trọng phần đầu trang
- Nén JS/CSS 2026 — hướng dẫn đầy đủ
- Tree shaking — loại JS code không dùng
- FCP vs LCP — phân biệt và tối ưu
- Core Web Vitals 2026 — tổng quan
Câu hỏi thường gặp
Remove Unused CSS có làm hỏng theme không?
Có rủi ro nếu theme dùng nhiều class động. Class modal, tooltip, animation thêm bằng JS có thể bị xóa nhầm.
Giao diện bị hỏng là dấu hiệu rõ nhất. Cách phòng:
- Luôn test toàn site sau khi bật — không chỉ trang chủ.
- WP Rocket có “Recommended Exclusions” tự thêm class WordPress động — vẫn phải audit thêm.
- Thêm class bị thiếu vào safelist/exclusion list.
Trang có nội dung động (kết quả tìm kiếm) — purge CSS thế nào?
PurgeCSS tại thời điểm build chỉ quét template tĩnh, bỏ sót class được render phía server. Hai hướng xử lý:
- Plugin runtime (WP Rocket): quét từng URL bằng trình duyệt không giao diện — phát hiện được class động.
- Safelist regex rộng: giữ lại nhóm class động bằng pattern như
/^search-/.
Tailwind có cần PurgeCSS riêng không?
Tailwind v3 chế độ JIT tự tạo ra chỉ class đang dùng trong template — output 5-15KB thay 3MB raw. Không cần PurgeCSS riêng.
Tailwind v2 trở về trước cần cấu hình PurgeCSS thủ công.
WordPress có hàm tải CSS có điều kiện không?
Có. Dùng wp_enqueue_style kết hợp hàm kiểm tra trang: chỉ tải WooCommerce CSS trên trang shop bằng is_woocommerce(), is_cart(), is_checkout().
Plugin Asset CleanUp cung cấp giao diện quản lý điều kiện này mà không cần code.
Có nên bỏ hẳn FontAwesome và dùng SVG inline?
Nên cân nhắc nếu chỉ dùng dưới 10 icon. FontAwesome full bundle 70KB cho 10 icon là lãng phí.
SVG inline không cần HTTP request thêm.
WordPress có plugin “SVG Support” hoặc thêm trực tiếp SVG vào template.
Cần hỗ trợ tối ưu CSS và cải thiện hiệu năng toàn site? Xem dịch vụ tối ưu hiệu năng của Web22.


