Bài học SEO từ việc sửa chính trang web của chúng tôi
Chúng tôi đã dành vài ngày đọc trang web của mình như cách một công cụ tìm kiếm đọc, và tìm thấy sáu điều đáng sửa. Mọi trang đều khai báo hai khối FAQ, Google đang dùng một vầng sáng trang trí làm ảnh đại diện của chúng tôi, một nhóm trang mẫu đang xếp hạng cho những tìm kiếm mà chúng không trả lời, và một phần mới của trang web bị chính lớp biên của chúng tôi chặn trên môi trường staging. Không cái nào kịch tính. Nhưng tất cả đều âm thầm làm giảm khả năng hiển thị của chúng tôi.
Trang web trong một đoạn
mythex.ai là một ứng dụng một trang mà chúng tôi prerender lúc build: một script đi qua mọi route, ghi một file HTML tĩnh cho từng route, và chèn tiêu đề, mô tả và dữ liệu có cấu trúc của trang (khối JSON-LD cho công cụ tìm kiếm biết trang đó là gì — xem dữ liệu có cấu trúc là gì). Phần lớn những điều sau đây nằm trong bước prerender, vì đó là HTML mà crawler thực sự đọc.
1. Mọi trang đều tự nhận là trang FAQ
Triệu chứng. Mẫu HTML của chúng tôi mang một khối FAQPage dùng chung cho toàn site trong dữ liệu có cấu trúc, với URL trỏ đến /faq. Sau đó prerender thêm FAQPage riêng của từng trang lên trên. Vì vậy mỗi trang trên site đều có hai khối — và trang chính sách quyền riêng tư của chúng tôi đang nói với Google rằng nó là trang FAQ.
Vì sao quan trọng. Google kỳ vọng tối đa một FAQPage trên mỗi trang. Một khối thứ hai trỏ đi nơi khác là kiểu việc khiến đánh dấu của trang bị giảm giá trị, không chỉ bị bỏ qua.
Cách sửa. Khối dùng chung đã được gỡ bỏ. Đánh dấu FAQ của mỗi trang giờ đến từ một nơi duy nhất, kể cả chính /faq, trang này tự dựng từ toàn bộ danh sách câu hỏi. Các trang không có FAQ giờ không khai báo gì, đó là câu trả lời trung thực. Và prerender sẽ làm build thất bại nếu có trang nào lại mang nhiều hơn một FAQPage. Một quy tắc chỉ nằm trong trí nhớ của ai đó sớm muộn cũng bị phá; một quy tắc do build thực thi thì không.
2. Google dùng sai hình cho chúng tôi
Triệu chứng. Trong kết quả tìm kiếm, ảnh thu nhỏ của Mythex là vầng sáng mờ đang nhấp nháy phía sau phần hero trang chủ — một ảnh nền trang trí — thay vì thẻ chia sẻ của chúng tôi.
Vì sao xảy ra. Chúng tôi chưa bao giờ nói với Google ảnh nào đại diện cho trang, nên nó tự chọn một ảnh mà nó tìm thấy.
Cách sửa. Hai mặt của cùng một vấn đề:
- Nói rõ ảnh nào là của trang. Trang chủ giờ có một nút
WebPagevớiprimaryImageOfPagetrỏ đến thẻ chia sẻ, và dữ liệu có cấu trúc của mọi trang đã prerender đều mang ảnh riêng của nó (ảnh chia sẻ của trang, hoặc ảnh mặc định). - Ẩn phần trang trí. Các ảnh nền giờ bị chặn trong
robots.txtvà được phục vụ với headernoindex, noimageindex, nên chúng nằm ngoài tìm kiếm hình ảnh và ảnh thu nhỏ.
3. Công cụ tìm kiếm chỉ biết logo của chúng tôi
Dữ liệu Organization của chúng tôi chỉ có tên, logo và một vài liên kết mạng xã hội — chỉ là thương hiệu, không có gì khác. Công cụ tìm kiếm xây bảng tri thức của một công ty từ các dữ kiện kiểu đăng ký kinh doanh, nên chúng tôi đã thêm những dữ kiện lấy từ giấy phép kinh doanh: tên pháp lý, ngày thành lập, người sáng lập và địa chỉ đăng ký. Chúng tôi cố ý bỏ số điện thoại.
4. Các trang mẫu trả lời sai câu hỏi
Triệu chứng. Search Console cho thấy ba trang mẫu có lượt hiển thị nhưng không có lượt nhấp. Một trang xếp hạng cho “content strategist portfolio” và các biến thể của nó, một trang cho “best italian restaurant website design”, một trang cho một cụm quanh “agile board” — gần một nửa các tìm kiếm đó có chữ “free”. Vị trí dao động từ giữa thập niên 20 đến thập niên 50.
Vì sao. Mỗi trang trả lời một câu hỏi khác với câu được hỏi. Ai đó muốn xem thiết kế nhà hàng Ý tốt trông như thế nào lại đặt chân vào một trang đang bán cho họ một công cụ dựng trang.
Cách sửa. Mỗi trang trong ba trang giờ có một phần được viết cho tìm kiếm thay vì cho sản phẩm, một tiêu đề và mô tả bằng đúng những từ người ta gõ, và các FAQ đáng để có đánh dấu mà chúng đã phát ra từ trước.
Cùng commit đó cũng sửa một vấn đề âm thầm hơn. Khối “mẫu liên quan” lấy bốn mẫu đầu tiên trong một danh mục, nên mọi mẫu portfolio đều trỏ đến cùng bốn portfolio, và phần còn lại của danh mục không có liên kết nội bộ nào. Chúng tôi thay nó bằng một vòng được sắp theo danh mục con: mọi trang mẫu giờ có đúng bốn liên kết vào và bốn liên kết ra. HTML đã prerender cũng in các liên kết đó ngay bây giờ — trước đây chúng chỉ tồn tại sau khi JavaScript chạy, điều mà crawler có thể không bao giờ làm.
5. Báo cho Bing về trang mới ngay khi triển khai
Google bỏ qua IndexNow, một giao thức để ping công cụ tìm kiếm khi một URL thay đổi. Bing, Yandex và Seznam dùng nó — và chỉ mục của Bing là thứ mà tìm kiếm của ChatGPT đọc. Một công cụ dựng ứng dụng AI mà trợ lý AI không tìm thấy là một kiểu thất bại đặc biệt.
Cách hiển nhiên là gửi toàn bộ sitemap mỗi lần triển khai, nhưng đó là cách khóa bị giới hạn tốc độ, và hầu hết các lần triển khai không thay đổi gì mà công cụ tìm kiếm quan tâm. Vì vậy một script so sánh sitemap mà site đang phục vụ với sitemap vừa build, và chỉ gửi phần khác biệt.
Hai chi tiết làm cho nó hoạt động:
- Chụp ảnh trước khi triển khai. Mốc cơ sở phải được ghi lại trước khi bản build mới lên sóng. Sau đó, sitemap “đang sống” đã là bản mới và mọi phần khác biệt đều trống.
- Chỉ trang mới, tạm thời. Sitemap của chúng tôi không có ngày
lastmod, nên script thông báo các trang mới nhưng không thông báo các trang viết lại. Gắn ngày build cho mọi URL sẽ đánh dấu toàn bộ site là đã thay đổi trong mỗi lần triển khai — đúng kiểu spam mà chúng tôi đang tránh.
Nó chỉ chạy khi triển khai lên production và không bao giờ làm build thất bại: đến lúc nó chạy thì site đã lên sóng, và một lần ping công cụ tìm kiếm không đáng để một lần triển khai bị đỏ.
6. Lớp biên của chúng tôi nói “không tìm thấy”
Khi ra mắt các trang /ai (xem thêm trong một trang đích cho mọi loại hình kinh doanh), staging hiển thị “Not found” cho tất cả, trong khi máy chủ tĩnh vẫn phục vụ chúng bình thường.
Dịch vụ đứng trước các host marketing của chúng tôi chỉ chuyển tiếp một danh sách cho phép các đường dẫn; mọi thứ khác nhận một lỗi 404 cứng. /ai là mới và không có trong danh sách. Chúng tôi đã thêm /ai và /ai/*, cùng một bài kiểm tra khẳng định chúng đi qua. Một lỗi nhỏ, nhưng đúng loại khiến một phần mới của site trở nên vô hình với crawler mà không ai nhận ra.
Chúng tôi rút ra gì
- Đọc HTML mà crawler đọc. Hầu hết những lỗi này vô hình trong trình duyệt và hiển nhiên trong file đã prerender.
- Biến quy tắc SEO thành kiểm tra của build. “Một FAQPage cho mỗi trang” giờ được thực thi, không còn chỉ được nhớ.
- Nói rõ với công cụ tìm kiếm ý bạn. Nếu bạn không nói ảnh nào hay dữ kiện nào đại diện cho mình, họ sẽ đoán.
- Search Console cho bạn biết người ta đã hỏi câu nào. Hiển thị mà không có nhấp thường nghĩa là trang trả lời một câu khác.
- Gửi phần khác biệt, không gửi tất cả. Chỉ ping những gì đã thay đổi giúp bạn nằm trong giới hạn tốc độ.
Nếu bạn đang làm điều tương tự cho một site bạn đã xây, các hướng dẫn của chúng tôi về SEO cho website xây bằng AI và thiết lập Google Search Console bao quát phần cơ bản.