SSL Mixed Content Scanner
Công cụ phát hiện các tài nguyên HTTP được tải trên trang HTTPS gây cảnh báo bảo mật và ảnh hưởng UX/SEO.
SSL Mixed Content Scanner là gì?
SSL Mixed Content Scanner là công cụ kiểm tra trang web đang dùng giao thức HTTPS để phát hiện các tài nguyên (như hình ảnh, script, CSS, iframe, font…) vẫn được tải qua giao thức HTTP không bảo mật. Khi một trang HTTPS chứa nội dung HTTP, trình duyệt coi đó là mixed content — nội dung hỗn hợp — và có thể chặn tải hoặc hiển thị cảnh báo bảo mật cho người dùng.
Loại lỗi này chia làm hai nhóm chính:
- Mixed content nguy hiểm (active mixed content): gồm script, iframe, CSS, AJAX, object… — trình duyệt thường chặn tự động vì có thể gây rủi ro bảo mật cao.
- Mixed content thụ động (passive mixed content): như hình ảnh, âm thanh, video — trình duyệt có thể vẫn tải nhưng cảnh báo trong Console hoặc DevTools.
Tại sao quan trọng trong SEO?
SSL Mixed Content Scanner không chỉ là công cụ bảo mật — nó trực tiếp ảnh hưởng đến hiệu suất SEO vì ba lý do chính:
- Ảnh hưởng trải nghiệm người dùng (UX): Cảnh báo “Trang không an toàn” trên thanh địa chỉ làm giảm lòng tin, tăng tỷ lệ thoát (bounce rate), đặc biệt với người dùng di động hoặc khách hàng tiềm năng.
- Tác động gián tiếp đến thứ hạng: Google xác nhận HTTPS là yếu tố xếp hạng nhẹ, nhưng hơn hết: trang bị cảnh báo bảo mật thường có thời gian ở lại ngắn hơn, tương tác thấp hơn — những tín hiệu hành vi này được Google sử dụng trong thuật toán đánh giá chất lượng trang.
- Gây lỗi render và chức năng: Nếu script hoặc CSS HTTP bị chặn, giao diện có thể vỡ, nút không hoạt động, form không gửi được — dẫn đến mất chuyển đổi và giảm khả năng thu thập dữ liệu phân tích (GA4, GTM).
Theo báo cáo của BuiltWith (2023), khoảng 12% website đã bật HTTPS vẫn tồn tại ít nhất một lỗi mixed content ở cấp độ active — chủ yếu do quên cập nhật đường dẫn trong CMS, theme hoặc plugin.
Cách hoạt động
Công cụ quét mixed content thường hoạt động theo quy trình sau:
- Thu thập URL: Người dùng nhập URL gốc (ví dụ:
https://example.com) hoặc tải danh sách URL từ file CSV. - Tải trang và phân tích DOM: Công cụ mô phỏng trình duyệt (hoặc dùng Puppeteer/Playwright) để tải trang đầy đủ, sau đó đọc toàn bộ thẻ
<script>,<link>,<img>,<iframe>,<source>… - Phát hiện giao thức: Kiểm tra thuộc tính
src,href,data-src… xem có chứahttp://không — đồng thời loại trừ các trường hợp hợp lệ nhưhttp://localhosthoặc URL tương đối (/assets/js/main.js). - Báo cáo chi tiết: Liệt kê từng tài nguyên vi phạm kèm vị trí (URL trang, thẻ HTML, dòng mã nếu có), mức độ nghiêm trọng (active/passive), và đề xuất sửa (thay thành
https://hoặc đường dẫn tương đối).
Một số công cụ nâng cao còn kiểm tra cả header Content-Security-Policy để phát hiện cấu hình thiếu upgrade-insecure-requests.
Hướng dẫn thực hiện
Dưới đây là quy trình kiểm tra và xử lý mixed content chuẩn cho website WordPress và tĩnh:
- Bước 1: Quét sơ bộ bằng công cụ miễn phí
- Dùng Why No Padlock? hoặc Mixed Content Scan nhập URL gốc.
- Kiểm tra tab Console trong DevTools (F12 → chọn tab Console) khi mở trang HTTPS — các cảnh báo
Mixed Contentsẽ hiện màu đỏ.
- Bước 2: Quét sâu toàn bộ website
- Với website lớn: dùng mixed-content-scan (CLI) hoặc Screaming Frog SEO Spider (bật tùy chọn Check for Mixed Content trong Configuration > Spider > Advanced).
- Xuất báo cáo dạng CSV để lọc theo
status = 'Mixed Content'.
- Bước 3: Sửa lỗi
- Với nội dung tĩnh: thay
http://thànhhttps://hoặc dùng đường dẫn tương đối (//example.com/image.jpg). - Với WordPress: kích hoạt plugin Really Simple SSL hoặc SSL Insecure Content Fixer — chọn mức độ sửa phù hợp (Level 2–4).
- Với CDN: đảm bảo thiết lập Force HTTPS và bật tùy chọn Auto-HTTPS Rewrite (Cloudflare, BunnyCDN…).
- Với nội dung tĩnh: thay
- Bước 4: Kiểm tra lại
- Mở lại DevTools → Console để xác nhận không còn cảnh báo.
- Dùng SecurityHeaders.com kiểm tra header
Content-Security-Policycó chứaupgrade-insecure-requests.
Lỗi thường gặp
| Lỗi | Nguồn gốc | Cách khắc phục |
|---|---|---|
Blocked loading mixed active content "http://cdn.example.com/script.js" |
Script bên ngoài chưa cập nhật giao thức | Thay thành https:// hoặc //cdn.example.com/script.js. Nếu CDN không hỗ trợ HTTPS, cần đổi nhà cung cấp. |
The page at 'https://...' was loaded over HTTPS, but requested an insecure image 'http://...' |
Hình ảnh trong bài viết hoặc widget | Sửa trong trình soạn thảo (thay http:// bằng https://); hoặc chạy SQL query cập nhật toàn bộ: UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://example.com', 'https://example.com'); |
Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint |
AJAX gọi API HTTP từ frontend | Cập nhật URL API trong JavaScript thành HTTPS; hoặc cấu hình proxy ngược (Nginx/Apache) để chuyển tiếp yêu cầu an toàn. |
Ví dụ thực tế
Một cửa hàng điện máy Việt Nam (domain: dienmayabc.vn) sau khi nâng cấp lên HTTPS, vẫn nhận phản hồi từ khách hàng về lỗi “Không tải được hình sản phẩm” trên trang danh mục. Kiểm tra DevTools thấy 17 cảnh báo Mixed Content dạng img trỏ tới http://images.dienmayabc.vn/....
Nguyên nhân: hệ thống quản lý nội dung (CMS nội bộ) lưu đường dẫn tuyệt đối trong cơ sở dữ liệu, và không tự động cập nhật khi bật SSL. Đội SEO đã dùng Screaming Frog quét 2.400 trang, xuất danh sách 89 ảnh vi phạm, sau đó chạy script tự động thay thế toàn bộ http://images.dienmayabc.vn → https://images.dienmayabc.vn. Sau 48 giờ, tỷ lệ thoát giảm 22%, thời gian ở lại tăng 31%, và Google Search Console không còn cảnh báo bảo mật nào.
Câu hỏi thường gặp
Mixed content có ảnh hưởng trực tiếp đến thứ hạng Google không?
Google không xếp hạng trang dựa riêng vào mixed content, nhưng trang có cảnh báo bảo mật thường có chỉ số UX kém hơn — điều này gián tiếp làm giảm điểm chất lượng trang (Page Experience Score), đặc biệt khi kết hợp với Core Web Vitals yếu. Vì vậy, việc sửa mixed content là ưu tiên bắt buộc trước khi tối ưu tốc độ hoặc nội dung.
Có nên dùng redirect 301 từ HTTP sang HTTPS cho từng tài nguyên?
Không hiệu quả và không giải quyết được vấn đề. Redirect 301 chỉ hoạt động khi trình duyệt đã tải được thẻ HTML — nhưng với active mixed content, trình duyệt chặn ngay từ đầu nên không bao giờ gửi request đến server. Cách duy nhất là sửa nguồn gốc URL trong mã nguồn.
Công cụ quét mixed content có phát hiện được nội dung tải qua JavaScript động không?
Tùy trường hợp. Các công cụ dựa trên crawler tĩnh (như cũ của WAVE hay Lighthouse phiên bản cũ) thường bỏ sót. Công cụ dùng headless browser (Screaming Frog, Sitebulb, hoặc custom Puppeteer script) có thể phát hiện nếu script thực thi và thêm thẻ vào DOM. Tuy nhiên, nội dung sinh ra bởi sự kiện click hoặc scroll thì có thể thay đổi tùy vào cách triển khai.