Lỗi mixed content xảy ra khi trang chạy qua HTTPS nhưng vẫn nhúng tài nguyên (ảnh, CSS, JS, font) qua HTTP — khiến trình duyệt báo “không an toàn” và mất khoá xanh. Thường gặp sau khi vừa gắn chứng chỉ SSL. Bài này chỉ cách sửa tận gốc, an toàn cho dữ liệu.
Vì sao mất khoá xanh sau khi gắn SSL
Sau khi chuyển sang HTTPS, nội dung cũ trong cơ sở dữ liệu vẫn còn nhiều đường dẫn http:// cứng (trong bài viết, cấu hình theme, plugin). Trình duyệt thấy trang an toàn (HTTPS) lại tải tài nguyên không an toàn (HTTP) nên cảnh báo và bỏ khoá xanh.
Cách sửa theo thứ tự
- Mở Công cụ nhà phát triển → Console để biết chính xác tài nguyên
httpnào đang bị chặn. - Đổi đường dẫn trong cơ sở dữ liệu từ
http://tenmiensanghttps://tenmien. Cách an toàn:- Plugin Better Search Replace, hoặc
- WP-CLI:
wp search-replace 'http://tenmien' 'https://tenmien' --report-changed-only(chừa các bảng không liên quan, không dùng--all-tablesbừa).
- Plugin vá nhanh tạm thời (Really Simple SSL / SSL Insecure Content Fixer) — coi là giải pháp tạm, đổi đường dẫn trong cơ sở dữ liệu mới là sửa gốc.
- Tài nguyên ngoài không hỗ trợ HTTPS: không vá sạch được — phải gỡ hoặc thay nguồn khác.
- Xoá cache (kể cả CDN) sau khi sửa.
Vì sao không được chạy SQL thô để đổi đường dẫn
WordPress lưu nhiều cấu hình (tuỳ chọn theme, dữ liệu widget, cài đặt plugin) dưới dạng “serialize” — một chuỗi có ghi sẵn độ dài của từng giá trị. Khi bạn đổi http://tenmien (16 ký tự) thành https://tenmien (17 ký tự), độ dài thay đổi. Nếu chạy câu lệnh SQL REPLACE() thô, nó đổi chữ nhưng không cập nhật con số độ dài → chuỗi serialize hỏng → vỡ cấu hình theme/widget. Đó là lý do bắt buộc dùng Better Search Replace hoặc WP-CLI: chúng hiểu serialize và sửa lại độ dài cho đúng.
Sai lầm nguy hiểm cần tránh
Tuyệt đối không chạy câu lệnh SQL REPLACE() thô trên các bảng như wp_options, wp_postmeta để đổi đường dẫn. WordPress lưu nhiều dữ liệu dạng “serialize”; lệnh thô sẽ làm hỏng chuỗi này, gây vỡ widget và cấu hình theme. Luôn dùng plugin hoặc WP-CLI — chúng tự xử lý dữ liệu serialize đúng cách.
Phòng tái diễn
Gắn SSL xong là chạy đổi đường dẫn ngay; đặt Site URL và Home URL đúng dạng https; ưu tiên đường dẫn tương đối cho tài nguyên nội bộ khi có thể. Cần hỗ trợ chuyển HTTPS sạch, xem dịch vụ sửa chữa website.
Tìm đúng tài nguyên lỗi bằng Console
Trước khi sửa, nên biết chính xác cái gì đang gây mixed content để khỏi đoán mò:
- Mở trang bị lỗi, nhấn
F12để mở Công cụ nhà phát triển, chọn tab Console. - Tìm các dòng cảnh báo “Mixed Content: The page was loaded over HTTPS, but requested an insecure…”. Mỗi dòng chỉ rõ một tài nguyên
http://đang bị chặn — ảnh, file CSS, JS, hay font. - Ghi lại nguồn của chúng: nếu là tài nguyên nội bộ (cùng tên miền) thì đổi đường dẫn trong cơ sở dữ liệu sẽ xử hết; nếu là tài nguyên bên ngoài không hỗ trợ HTTPS thì phải thay nguồn khác hoặc gỡ.
Cách này giúp bạn phân biệt ngay “sửa được bằng đổi đường dẫn” hay “phải thay nguồn ngoài”, thay vì cài hết plugin này tới plugin khác mà vẫn còn cảnh báo.
Câu hỏi thường gặp
Cài plugin SSL là hết mixed content chưa?
Plugin chỉ vá tạm ở tầng hiển thị. Để sạch gốc, vẫn nên đổi đường dẫn http sang https trong cơ sở dữ liệu.
Vì sao không nên chạy SQL REPLACE thẳng?
Vì nó làm hỏng dữ liệu serialize của WordPress, gây vỡ cấu hình. Dùng Better Search Replace hoặc WP-CLI để an toàn.
