Dịch vụ SEO kỹ thuật: chẩn đoán theo tầng, ưu tiên theo bằng chứng, đóng vòng bằng QA
Dịch vụ SEO kỹ thuật của RED: chẩn đoán theo tầng crawl – render – index, ma trận trạng thái indexability, cây quyết định canonical/redirect và QA sau deploy.
Phần lớn báo cáo Technical SEO mà doanh nghiệp nhận được là một danh sách lỗi xuất từ công cụ crawl: 170 issue, chia thành ba mức đỏ – vàng – xanh, kèm một điểm số sức khỏe website. Vấn đề nằm ở chỗ danh sách đó không trả lời được câu hỏi duy nhất mà đội kỹ thuật cần: URL này đang hỏng ở đâu, và sửa xong thì lấy gì để chứng minh là đã hết hỏng.
Trang này mô tả cách RED tiếp cận SEO kỹ thuật theo hướng ngược lại với danh sách lỗi. Điểm bắt đầu là một funnel chẩn đoán: một URL phải đi qua discovery, crawl, render, indexability, canonical selection rồi mới tới search appearance. Hỏng ở tầng nào thì cách xử lý và bằng chứng nghiệm thu ở tầng đó khác nhau hoàn toàn. Sửa nhầm tầng là dạng lãng phí phổ biến nhất trong các dự án technical.
Một ranh giới cần nói trước. Tài liệu kỹ thuật của Google nêu điều kiện tối thiểu để một trang đủ tư cách xuất hiện trên Google Search: Googlebot không bị chặn, trang trả HTTP 200 thành công, và trang có nội dung có thể lập chỉ mục. Đáp ứng đủ ba điều kiện đó không đồng nghĩa trang sẽ được index. Đó là điều kiện cần, không phải điều kiện đủ. Vì vậy RED không cam kết index, không cam kết thứ hạng và không cam kết mốc thời gian phục hồi sau khi sửa lỗi kỹ thuật. Cái RED cam kết được là quy trình chẩn đoán có bằng chứng, tiêu chí nghiệm thu rõ ràng và trạng thái kỹ thuật sau xử lý được kiểm chứng lại bằng dữ liệu chứ không bằng cảm giác.
Technical SEO là một diagnostic funnel, không phải một checklist
Câu hỏi mở đầu của mọi dự án kỹ thuật không phải "website có bao nhiêu lỗi" mà là "URL quan trọng đang dừng lại ở tầng nào".
Một URL đi từ trạng thái không tồn tại trong hệ thống Google đến trạng thái hiển thị trên kết quả tìm kiếm qua nhiều tầng nối tiếp. Google phải biết URL tồn tại (discovery). Googlebot phải lấy được URL (crawl). Nội dung phụ thuộc JavaScript phải được dựng lại (render). Trang phải không bị chặn lập chỉ mục (indexability). Google phải chọn chính URL đó làm bản đại diện cho nhóm nội dung trùng lặp (canonical selection). Cuối cùng mới đến chuyện trang có được chọn hiển thị cho truy vấn nào.
Điểm quan trọng: mỗi tầng có một loại triệu chứng riêng và một loại bằng chứng riêng. Trang không được index vì bị chặn trong robots.txt và trang không được index vì Google chọn URL khác làm canonical là hai vấn đề khác nhau về bản chất, cần hai cách xử lý khác nhau, và không có checklist chung nào giải quyết được cả hai.
Vì sao nhảy thẳng vào checklist gây hại
Khi bỏ qua bước chẩn đoán tầng, đội triển khai thường làm ba việc theo phản xạ: nộp lại sitemap, thêm thẻ canonical hàng loạt, và tối ưu tốc độ. Cả ba đều là hành động hợp lệ trong đúng ngữ cảnh. Nhưng nếu URL đang bị chặn ở tầng crawl, không hành động nào trong ba thứ đó chạm được vào nguyên nhân. Kết quả là dự án tiêu hết ngân sách dev cho những thay đổi không liên quan đến vấn đề gốc, rồi kết luận sai rằng "technical đã làm rồi mà không lên".
Funnel chẩn đoán Crawl – Render – Index
| Tầng | Câu hỏi chẩn đoán | Bằng chứng cần lấy | Triệu chứng khi hỏng |
|---|---|---|---|
| Discovery | Google có biết URL này tồn tại không? | Sitemap, internal link, report Pages trong Search Console | URL không xuất hiện trong bất kỳ report nào; orphan page |
| Crawl | Googlebot có lấy được URL không? | robots.txt, HTTP status, log server (nếu có), crawl stats | Blocked by robots.txt; lỗi 5xx; timeout |
| Render | Nội dung và link có tồn tại sau khi dựng trang không? | So sánh HTML nguồn với DOM đã render, URL Inspection | Trang trắng trong rendered HTML; link không tồn tại ở HTML ban đầu |
| Indexability | Trang có tự chặn lập chỉ mục không? | Meta robots, header X-Robots-Tag, HTTP status | Crawled – currently not indexed; Excluded by noindex tag |
| Canonical selection | Google chọn URL nào làm bản đại diện? | URL Inspection: canonical do người dùng khai và canonical Google chọn | Alternate page with proper canonical tag; Duplicate, Google chose different canonical |
| Search appearance | Trang có đủ điều kiện cho các tính năng hiển thị không? | Structured data test, report Enhancements | Rich result không đủ điều kiện; hiển thị sai tiêu đề |
Cách đọc bảng này trong thực tế: chọn ra nhóm URL có giá trị thương mại cao nhất (trang dịch vụ, trang danh mục, trang sản phẩm chủ lực), chạy từng tầng từ trên xuống, dừng lại ở tầng đầu tiên có bằng chứng bất thường. Đó là tầng cần xử lý. Các tầng phía dưới chưa cần đụng đến vì trạng thái của chúng chưa đáng tin khi tầng trên còn hỏng.
Một lưu ý về giới hạn của chính phương pháp này. Funnel giúp khoanh vùng nguyên nhân, không giúp dự đoán kết quả. Khi một URL vượt qua toàn bộ sáu tầng và vẫn không được index, kết luận đúng là "trang đã đủ điều kiện kỹ thuật, phần còn lại nằm ngoài phạm vi technical" — chứ không phải "cần sửa thêm lỗi kỹ thuật". Việc phân biệt hai kết luận này giữ cho ngân sách dev không bị đốt vào những thay đổi không có cơ sở.
Indexability là một trạng thái, không phải một ô tích
Câu hỏi ở tầng này: sự kết hợp giữa robots.txt, thẻ meta robots, header HTTP, mã trạng thái và thẻ canonical tạo ra những trạng thái nào, và trạng thái nào đang lệch so với ý định của doanh nghiệp?
Sai lầm phổ biến nhất là coi indexability như một công tắc bật/tắt. Thực tế nó là kết quả của nhiều tín hiệu chồng lên nhau, và các tín hiệu này có thể mâu thuẫn. Một trang bị chặn trong robots.txt nhưng có thẻ noindex sẽ không cho ra kết quả như người triển khai mong đợi: Googlebot không tải được trang nên không đọc được thẻ noindex. Đây là lý do robots.txt không phải công cụ để gỡ một trang khỏi chỉ mục. Muốn một trang không xuất hiện trong kết quả tìm kiếm, trang đó phải cho phép crawl để Google đọc được chỉ thị noindex.
Ma trận trạng thái indexability
| Trạng thái | robots.txt | Meta robots / X-Robots-Tag | HTTP status | Canonical | Kết quả kỳ vọng | Cách xác minh |
|---|---|---|---|---|---|---|
| Bị chặn crawl | Disallow | Không đọc được | Không xác định | Không đọc được | Không crawl; vẫn có thể xuất hiện dạng URL trần nếu có link trỏ tới | robots.txt tester; report Pages |
| 200 + noindex | Allow | noindex | 200 | Bất kỳ | Không index; đây là cách gỡ trang đúng | URL Inspection; xem header response |
| 404 thật | Allow | — | 404/410 | — | Loại khỏi chỉ mục sau khi crawl lại | Kiểm tra status code trực tiếp |
| Soft 404 | Allow | — | 200 | — | Google coi như không tồn tại dù server trả 200 | Report Pages: Soft 404 |
| Redirect | Allow | — | 301/302 | — | Tín hiệu hợp nhất về URL đích | Theo dõi chuỗi redirect |
| Duplicate có canonical | Allow | index | 200 | Trỏ URL khác | Google có thể chọn URL đích, có thể không | URL Inspection: so sánh canonical khai vs canonical Google chọn |
| Indexable | Allow | index | 200 | Tự trỏ chính nó | Đủ điều kiện xét index | URL Inspection |
Đối chiếu kỳ vọng với thực tế
Giá trị của ma trận không nằm ở việc liệt kê trạng thái mà ở việc đối chiếu. Với mỗi nhóm URL, doanh nghiệp cần trả lời: trạng thái mong muốn là gì, trạng thái thực tế là gì, và nếu lệch thì lệch do đâu.
Các cặp lệch hay gặp trong dự án thực tế:
Trang lọc và trang sắp xếp trong danh mục thương mại điện tử được kỳ vọng không index, nhưng thực tế trả 200, indexable, canonical tự trỏ — sinh ra hàng nghìn URL cạnh tranh nội bộ.
Trang dịch vụ chủ lực được kỳ vọng index, nhưng bị dính noindex sót lại từ môi trường staging sau một lần deploy.
Trang đã ngừng kinh doanh được kỳ vọng loại khỏi chỉ mục, nhưng template lỗi trả về 200 với nội dung rỗng — tạo soft 404 hàng loạt.
Trang phân trang được kỳ vọng đóng vai trò discovery, nhưng bị canonical hóa toàn bộ về trang 1, khiến sản phẩm ở các trang sau mất đường vào.
Mỗi cặp lệch là một finding có thể mô tả bằng câu: URL nhóm X đang ở trạng thái A, cần ở trạng thái B, nguyên nhân nằm ở tầng C, sửa bằng thay đổi D, nghiệm thu bằng bằng chứng E. Cách viết finding này quan trọng hơn số lượng finding, vì nó chuyển vấn đề từ ngôn ngữ SEO sang ngôn ngữ mà đội phát triển có thể nhận việc và đóng việc.
Ranh giới cần giữ: không có trạng thái nào trong bảng trên bảo đảm được index. Ngay cả trạng thái Indexable cũng chỉ mô tả rằng trang không tự loại mình khỏi cuộc xét. Việc Google có index hay không phụ thuộc vào các yếu tố nằm ngoài quyền kiểm soát của bên triển khai kỹ thuật.
Canonical, redirect và duplicate cần một cây quyết định
Câu hỏi ở tầng này: với một URL cụ thể, nên đặt canonical, chuyển hướng 301, trả 404/410, hay giữ nguyên như một trang độc lập?
Tài liệu của Google mô tả canonicalization là quá trình Google chọn một URL đại diện khi có nhiều URL cùng chứa nội dung giống hoặc gần giống nhau. Thẻ canonical mà website khai báo là một tín hiệu để Google cân nhắc, không phải một mệnh lệnh. Google có thể chọn URL khác với URL được khai báo, và điều này xảy ra thường xuyên khi tín hiệu nội bộ mâu thuẫn: canonical trỏ một hướng nhưng internal link, sitemap và redirect lại trỏ hướng khác.
Hệ quả thực tế: đặt canonical không phải là kết thúc công việc. Sau khi đặt, phải kiểm tra lại Google thực sự chọn URL nào.
Cây quyết định canonical – redirect
| Tình huống | Nội dung có tương đương không? | Người dùng còn cần URL cũ không? | Hành động | Lý do | Rủi ro nếu làm sai |
|---|---|---|---|---|---|
| URL trùng do tham số theo dõi | Có | Không | Canonical về URL sạch, giữ tham số hoạt động | Gộp tín hiệu, không phá luồng tracking | Chặn tham số trong robots.txt làm mất luôn khả năng đánh giá |
| URL đã chuyển vĩnh viễn | Có | Không | 301 về URL mới | Chuyển hướng cả người dùng lẫn tín hiệu | 302 kéo dài khiến tín hiệu không hợp nhất |
| Biến thể sản phẩm khác biệt rõ (màu, dung lượng) | Không hoàn toàn | Có | Giữ riêng, canonical tự trỏ | Mỗi biến thể phục vụ một truy vấn riêng | Canonical gộp về sản phẩm gốc làm mất trang có nhu cầu tìm kiếm thật |
| Trang lọc không có nhu cầu tìm kiếm | Có phần | Có, trong phiên duyệt | Cho crawl, đặt noindex, giữ link nội bộ | Người dùng vẫn dùng bộ lọc; Google không cần index | Chặn robots.txt làm Googlebot không đọc được noindex |
| Trang ngừng vĩnh viễn, không có trang thay thế | — | Không | 410 (hoặc 404) | Tín hiệu dứt khoát, không tạo redirect rác | 301 về trang chủ hàng loạt dễ bị coi là soft 404 |
| Trang ngừng nhưng có trang thay thế sát nghĩa | Gần tương đương | Có | 301 về trang thay thế | Giữ trải nghiệm và tín hiệu | 301 về trang không liên quan gây trải nghiệm hụt |
| Nội dung trùng giữa hai ngôn ngữ / khu vực | Không (khác đối tượng) | Có | Giữ riêng, khai báo hreflang, canonical tự trỏ | Hai trang phục vụ hai nhóm người dùng | Canonical chéo giữa hai phiên bản làm mất một thị trường |
Ba điều kiện phải kiểm trước khi canonical hàng loạt
Việc canonical hóa cơ học — đặt canonical cho mọi URL trùng mà không xét ngữ cảnh — là nguồn gốc của phần lớn sự cố mất trang trong các dự án thương mại điện tử. Trước khi áp dụng quy tắc canonical trên diện rộng, cần kiểm tra:
Thứ nhất, nội dung có thực sự tương đương không. Hai trang khác nhau ở một thuộc tính mà người dùng dùng để tìm kiếm thì không tương đương, dù template giống nhau đến chín mươi phần trăm.
Thứ hai, các tín hiệu khác có đồng thuận không. Canonical trỏ URL A trong khi sitemap liệt kê URL B và toàn bộ internal link trỏ URL C là trạng thái mâu thuẫn. Google sẽ tự quyết, và kết quả thường không phải cái bên triển khai mong muốn.
Thứ ba, sau khi triển khai, canonical Google chọn là URL nào. Đây là bước hay bị bỏ. URL Inspection trong Search Console hiển thị đồng thời canonical do người dùng khai và canonical do Google chọn. Chỉ khi hai giá trị này trùng nhau thì mới coi là đã xử lý xong.
Trong phạm vi dịch vụ, RED xử lý phần cơ chế URL: xác định nhóm trùng lặp, dựng quy tắc canonical/redirect theo tình huống, và kiểm chứng lại kết quả sau triển khai. Phần quyết định trang nào nên tồn tại theo chiến lược kinh doanh thuộc về doanh nghiệp, vì nó liên quan đến danh mục sản phẩm và định hướng thị trường chứ không phải kỹ thuật.
JavaScript phải được kiểm tra bằng bằng chứng đã render
Câu hỏi ở tầng này: nội dung và liên kết chỉ xuất hiện sau khi JavaScript chạy — công cụ tìm kiếm có thấy chúng không?
Google có tài liệu riêng về cách xử lý JavaScript, mô tả quy trình crawl, render rồi mới index, cùng những điểm cần kiểm tra khi nội dung phụ thuộc vào JS. Điều tài liệu đó không nói là "mọi website JavaScript đều phải chuyển sang server-side rendering". RED không mặc định SSR là bắt buộc. SSR là một trong nhiều phương án, có chi phí kỹ thuật thật, và chỉ nên đề xuất khi bằng chứng render cho thấy có vấn đề cụ thể không giải quyết được bằng cách khác.
Nguyên tắc làm việc: không tranh luận về framework, chỉ so sánh bằng chứng. HTML nguồn ban đầu chứa gì, DOM sau khi render chứa gì, và khoảng chênh giữa hai thứ đó có ảnh hưởng đến nội dung hay liên kết quan trọng không.
Bộ bằng chứng render JavaScript
| Hạng mục kiểm tra | Cách lấy bằng chứng | Đạt | Không đạt |
|---|---|---|---|
| Nội dung chính | So sánh HTML nguồn và rendered HTML trong URL Inspection | Nội dung chính có mặt trong rendered HTML | Rendered HTML trống hoặc chỉ có khung layout |
| Liên kết nội bộ | Tìm thẻ <a href> trong rendered HTML | Link là thẻ a có thuộc tính href | Điều hướng bằng sự kiện click, không có href |
| Nội dung tải trễ | Cuộn/kích hoạt rồi kiểm tra lại DOM | Nội dung xuất hiện mà không cần thao tác người dùng | Nội dung chỉ hiện sau khi người dùng bấm |
| Định tuyến phía client | Kiểm tra URL có thay đổi và trả 200 khi truy cập trực tiếp | Mỗi trạng thái có một URL riêng, truy cập trực tiếp được | Nội dung chỉ đến được qua điều hướng trong ứng dụng |
| Tài nguyên bị chặn | Đối chiếu robots.txt với file JS/CSS cần cho render | Tài nguyên cần cho render không bị chặn | JS/CSS bị Disallow khiến render lỗi |
| Thẻ meta sinh bởi JS | So sánh thẻ trong HTML nguồn và sau render | Thẻ tiêu đề, mô tả, canonical, robots nhất quán | Thẻ bị ghi đè sau render, mâu thuẫn với HTML nguồn |
| Lỗi thời gian chờ | Kiểm tra thời gian tải tài nguyên chặn render | Tài nguyên phản hồi ổn định | Tài nguyên bên thứ ba lỗi làm hỏng toàn bộ render |
Trường hợp gây tổn hại âm thầm nhất trong bảng này là mục liên kết nội bộ. Khi điều hướng được xây bằng sự kiện JavaScript thay vì thẻ a có href, người dùng vẫn duyệt được website bình thường, không có lỗi nào hiện ra, không công cụ nào báo đỏ — nhưng cấu trúc liên kết mà crawler nhìn thấy nghèo hơn nhiều so với cấu trúc thật. Hệ quả là các trang sâu trở thành trang mồ côi dù menu vẫn dẫn tới chúng.
Khi bằng chứng render cho thấy vấn đề, thứ tự xem xét phương án nên đi từ rẻ đến đắt: sửa cách khai báo liên kết trước, xử lý tài nguyên bị chặn, điều chỉnh cách sinh thẻ meta, cải thiện định tuyến — rồi mới cân nhắc thay đổi kiến trúc render. Đề xuất SSR ngay từ đầu khi chưa loại trừ các nguyên nhân rẻ hơn là cách nhanh nhất để một dự án technical bị đội chi phí mà không cần thiết.
Sitemap là tín hiệu khám phá, không phải vé vào chỉ mục
Câu hỏi ở tầng này: sitemap nên chứa những URL nào, và kiểm soát chất lượng của nó bằng cách gì?
Tài liệu của Google mô tả sitemap là cách giúp Google phát hiện URL trên website, đặc biệt hữu ích với website lớn, website mới hoặc website có ít liên kết ngoài. Mỗi file sitemap giới hạn 50MB khi chưa nén và tối đa 50.000 URL; website vượt ngưỡng thì tách nhiều file và dùng file chỉ mục sitemap. Điều tài liệu nêu rõ: sitemap không bảo đảm URL trong đó sẽ được crawl hay được index.
Điều này định vị lại vai trò của sitemap trong dự án. Nộp lại sitemap không phải là hành động khắc phục cho một trang không được index. Nó chỉ có tác dụng khi vấn đề nằm ở tầng discovery — tức Google chưa biết URL tồn tại.
Checklist chất lượng sitemap
| Tiêu chí | Yêu cầu | Cách kiểm tra | Hệ quả khi sai |
|---|---|---|---|
| Chỉ chứa URL canonical | Không đưa URL bị canonical về nơi khác | Đối chiếu danh sách sitemap với thẻ canonical | Tín hiệu mâu thuẫn: sitemap nói A, canonical nói B |
| URL trả 200 và cho phép index | Loại URL 404, redirect, noindex | Crawl toàn bộ danh sách trong sitemap | Lãng phí ngân sách crawl, sinh cảnh báo trong Search Console |
| Giá trị lastmod phản ánh thay đổi thật | Chỉ cập nhật khi nội dung thay đổi thực sự | Đối chiếu lastmod với lịch sử chỉnh sửa trong CMS | Cập nhật hàng loạt mỗi lần build làm mất ý nghĩa của tín hiệu |
| Tuân thủ giới hạn dung lượng | Dưới 50MB chưa nén, dưới 50.000 URL mỗi file | Đếm dòng, kiểm tra dung lượng file | File bị bỏ qua một phần hoặc toàn bộ |
| Tách theo nhóm nội dung | Chia sitemap theo loại trang | Kiểm tra file chỉ mục sitemap | Không xác định được nhóm nào đang gặp vấn đề coverage |
| Khai báo và theo dõi | Nộp trong Search Console, khai trong robots.txt | Xem report Sitemaps | Lỗi phân tích cú pháp không được phát hiện |
| Đồng bộ khi có thay đổi cấu trúc | Sinh lại sau mỗi lần thay đổi URL | So khớp sitemap với crawl sau deploy | Sitemap trỏ URL đã chết sau khi tái cấu trúc |
Giá trị vận hành lớn nhất nằm ở tiêu chí tách theo nhóm. Khi sitemap được chia thành các file riêng cho trang dịch vụ, trang danh mục, trang sản phẩm và bài viết, report Sitemaps trở thành công cụ chẩn đoán theo nhóm chứ không chỉ là nơi nộp file: có thể thấy nhóm nào đang có tỷ lệ URL được phát hiện nhưng chưa index cao bất thường, và khoanh vùng nguyên nhân theo template thay vì theo từng URL lẻ.
Hiệu năng nằm trong chương trình kỹ thuật, nhưng không phải toàn bộ
Câu hỏi ở tầng này: khi nào một vấn đề hiệu năng thực sự đáng đưa lên đầu hàng đợi phát triển?
Cần tách hai chuyện. Hiệu năng ảnh hưởng đến trải nghiệm người dùng — điều này quan sát được trực tiếp qua tỷ lệ rời trang, tỷ lệ hoàn tất biểu mẫu, hành vi trên di động. Hiệu năng ảnh hưởng đến thứ hạng — điều này là quan hệ gián tiếp, phụ thuộc ngữ cảnh cạnh tranh, và không thể quy ra một lời hứa. RED không tuyên bố rằng đạt ngưỡng Core Web Vitals sẽ làm tăng thứ hạng. Cải thiện hiệu năng được đề xuất khi có bằng chứng người dùng thật đang gặp vấn đề, không phải vì một điểm số cần lên màu xanh.
Khác biệt giữa dữ liệu thực địa và dữ liệu phòng thí nghiệm quan trọng ở đây. Dữ liệu thực địa đến từ người dùng thật với thiết bị thật và mạng thật; dữ liệu phòng thí nghiệm đến từ một lần chạy mô phỏng trong điều kiện chuẩn hóa. Điểm số phòng thí nghiệm thấp trong khi dữ liệu thực địa ổn là tình huống nên xếp ưu tiên thấp. Trường hợp ngược lại — dữ liệu thực địa xấu trên một template phủ nhiều trang quan trọng — mới là thứ cần đưa vào sprint.
Bảng ưu tiên hiệu năng
| Chỉ số | Nguyên nhân thường gặp | Bằng chứng cần có | Đòn bẩy | Khi nào ưu tiên cao |
|---|---|---|---|---|
| LCP | Ảnh hero nặng, thời gian phản hồi máy chủ, tài nguyên chặn render | Dữ liệu thực địa theo template, waterfall tải trang | Template dùng chung | Chậm trên nhóm trang mang doanh thu |
| INP | Tác vụ JS dài, script bên thứ ba, xử lý sự kiện nặng | Dữ liệu thực địa, hồ sơ tác vụ dài | Gỡ hoặc hoãn script | Trang có tương tác chính: form, bộ lọc, giỏ hàng |
| CLS | Ảnh không khai kích thước, banner chèn muộn, font hoán đổi | Ghi hình quá trình tải, dữ liệu thực địa | Sửa ở tầng layout | Người dùng bấm nhầm trên di động |
| TTFB | Máy chủ chậm, thiếu cache, truy vấn nặng | Đo phía máy chủ | Hạ tầng | Chậm trên toàn site, không riêng template nào |
Cách chọn việc: ưu tiên theo template chứ không theo URL. Sửa một vấn đề nằm trong template danh mục sẽ chạm tới toàn bộ trang dùng template đó; sửa một URL lẻ chỉ chạm tới chính nó. Với website có hàng nghìn trang, đây là khác biệt giữa một sprint có kết quả đo được và một sprint tiêu hết thời gian dev cho vài trang.
Ưu tiên xử lý phải có tác động, độ tin cậy, công sức và rủi ro
Câu hỏi ở tầng này: khi công cụ crawl trả về 170 phát hiện, chọn cái nào làm trước?
Số lượng lỗi không phải thước đo mức độ nghiêm trọng. Công cụ audit gán mức nghiêm trọng theo quy tắc chung của công cụ, không theo ngữ cảnh kinh doanh của website. Một cảnh báo "thiếu thẻ mô tả" trên hai nghìn trang lưu trữ không có lưu lượng sẽ nhảy lên đầu danh sách vì số lượng lớn, trong khi một trang dịch vụ chủ lực dính noindex chỉ đếm là một lỗi. Điểm sức khỏe website mà công cụ đưa ra là chỉ số nội bộ của công cụ đó, không phải điểm Google chấm cho website.
Vì vậy mọi phát hiện đều phải đi qua bốn câu hỏi trước khi vào hàng đợi: nó ảnh hưởng đến bao nhiêu trang có giá trị, mức độ chắc chắn của chẩn đoán tới đâu, sửa mất bao nhiêu công, và thay đổi này có khả năng làm hỏng thứ khác không.
Ma trận Tác động – Rủi ro – Công sức
| Phát hiện | Phạm vi ảnh hưởng | Tác động | Độ tin cậy của chẩn đoán | Công sức | Rủi ro hồi quy | Thứ tự |
|---|---|---|---|---|---|---|
| Trang dịch vụ chính bị noindex | 1 trang doanh thu | Cao | Cao — xác minh trực tiếp được | Thấp | Thấp | Làm ngay |
| Liên kết điều hướng không có href | Toàn site | Cao | Trung bình — cần bằng chứng render | Trung bình | Trung bình | Sprint gần |
| Chuỗi redirect 3 bước sau khi đổi tên miền | Nhóm URL cũ | Trung bình | Cao | Thấp | Thấp | Sprint gần |
| Trang lọc sinh URL không kiểm soát | Hàng nghìn URL | Trung bình | Trung bình | Cao | Cao | Cần thiết kế trước |
| Thiếu thẻ mô tả trên trang lưu trữ | Nhiều trang, ít giá trị | Thấp | Cao | Trung bình | Thấp | Xếp sau |
| Điểm sức khỏe công cụ dưới ngưỡng | Không xác định | Không đo được | Thấp | — | — | Không phải một việc |
Dòng cuối cùng đáng nói riêng. "Nâng điểm sức khỏe lên trên 90" không phải một yêu cầu kỹ thuật hợp lệ, vì nó không mô tả trạng thái nào của website và không có cách nghiệm thu nào ngoài việc chạy lại đúng công cụ đó. Nếu một bên cung cấp dịch vụ nhận KPI dạng này, họ sẽ tối ưu cho công cụ chứ không cho website. RED chuyển mọi yêu cầu dạng điểm số thành các phát hiện cụ thể có phạm vi, nguyên nhân và tiêu chí đóng.
Cột rủi ro hồi quy thường bị bỏ trong các báo cáo audit. Nó tồn tại vì nhiều thay đổi kỹ thuật có mặt trái: quy tắc redirect viết rộng quá tay có thể tạo vòng lặp; canonical áp hàng loạt có thể xóa sổ một nhóm trang đang có lưu lượng; chặn tham số trong robots.txt có thể làm mất khả năng đo lường chiến dịch. Một phát hiện tác động trung bình nhưng rủi ro hồi quy cao cần thiết kế và kiểm thử kỹ hơn một phát hiện tác động cao nhưng rủi ro thấp.
QA sau phát hành là thứ đóng vòng sửa lỗi
Câu hỏi ở tầng này: sau khi deploy, cần bằng chứng gì để tuyên bố một phát hiện đã được xử lý xong?
Câu trả lời không phải "code đã merge". Merge chỉ chứng minh thay đổi đã vào nhánh chính. Nó không chứng minh thay đổi đã lên môi trường sản xuất, không chứng minh nó hoạt động đúng ở đó, và không chứng minh nó không làm hỏng thứ khác. Phần lớn các dự án technical thất bại không phải vì chẩn đoán sai mà vì không có cổng kiểm soát ở bước này: phát hiện được đánh dấu hoàn thành trong bảng theo dõi trong khi trạng thái thật trên môi trường sản xuất không thay đổi.
Cổng QA SEO khi phát hành
| Giai đoạn | Việc kiểm tra | Bằng chứng đóng việc | Người chịu trách nhiệm |
|---|---|---|---|
| Trước phát hành | Crawl môi trường thử nghiệm, kiểm tra thẻ robots, canonical, status code trên các mẫu trang | Báo cáo crawl môi trường thử nghiệm | Kỹ thuật SEO + dev |
| Trước phát hành | Xác nhận môi trường thử nghiệm không rò rỉ ra ngoài | Kiểm tra chặn truy cập, chặn index | Dev |
| Ngay sau phát hành | Kiểm tra mẫu trên môi trường thật: status code, thẻ, redirect | Ảnh chụp phản hồi HTTP theo URL mẫu | Kỹ thuật SEO |
| Ngay sau phát hành | Kiểm tra rendered HTML trên trang bị ảnh hưởng | Kết quả URL Inspection | Kỹ thuật SEO |
| Trong 7 ngày | Crawl toàn site, so sánh với ảnh chụp trạng thái trước deploy | Bảng so sánh trước/sau | Kỹ thuật SEO |
| Trong 7 ngày | Theo dõi report Pages và Sitemaps trong Search Console | Ảnh chụp báo cáo theo mốc thời gian | Kỹ thuật SEO |
| Liên tục | Ghi nhật ký thay đổi và điều kiện quay lui | Nhật ký thay đổi có ngày, người thực hiện, phạm vi | Dev + quản lý dự án |
Ba nguyên tắc vận hành đi kèm bảng này.
Mỗi phát hiện phải có tiêu chí chấp nhận viết trước khi bắt tay sửa. Tiêu chí phải kiểm chứng được bằng một thao tác cụ thể: "URL nhóm X trả 200 và không còn thẻ noindex khi kiểm tra trực tiếp trên môi trường sản xuất" là tiêu chí hợp lệ; "sửa lỗi indexing" thì không.
Mỗi phát hiện phải có một người sở hữu và một ngày. Phát hiện không có chủ sẽ nằm trong bảng theo dõi qua nhiều sprint và cuối cùng bị đóng bằng một dòng ghi chú thay vì bằng bằng chứng.
Ảnh chụp trạng thái trước deploy phải được lưu. Không có ảnh chụp trước thì không có cách nào phân biệt một vấn đề mới xuất hiện sau deploy với một vấn đề vốn đã tồn tại từ trước. Đây là chi phí nhỏ nhất trong toàn bộ quy trình và cũng là thứ tiết kiệm nhiều thời gian tranh luận nhất khi có sự cố.
Cuối cùng, có một loại kết luận mà quy trình QA phải cho phép: đã sửa đúng, đã xác minh đúng, và trang vẫn chưa được index. Đây không phải thất bại của công việc kỹ thuật. Nó nghĩa là rào cản kỹ thuật đã được gỡ và nguyên nhân còn lại nằm ở phạm vi khác — chất lượng nội dung, mức độ trùng lặp với nội dung đã có trên web, hoặc mức độ ưu tiên mà Google dành cho website ở thời điểm đó. Việc gọi đúng tên kết luận này giữ cho dự án không tiếp tục đổ nguồn lực dev vào một tầng đã sạch.
Ranh giới giữa SEO kỹ thuật và các cụm dịch vụ khác
Để tránh chồng lấn phạm vi, RED tách rõ: SEO kỹ thuật sở hữu cơ chế crawl, render, index, phản hồi máy chủ và cấu trúc URL. SEO Onpage sở hữu ý định tìm kiếm, cấu trúc nội dung và giải phẫu trang. Khi doanh nghiệp cần một lần đánh giá tổng thể trước khi quyết định đầu tư vào hạng mục nào, SEO Audit là điểm bắt đầu phù hợp hơn. Với website thương mại điện tử, các vấn đề kỹ thuật thường gắn với cấu trúc danh mục, bộ lọc và biến thể sản phẩm — phần này được xử lý trong SEO ecommerce với cùng bộ công cụ chẩn đoán nhưng đặt trong bài toán danh mục.
Về phía năng lực triển khai: RED làm phần chẩn đoán, thiết kế giải pháp, viết tiêu chí chấp nhận và kiểm chứng sau deploy. Phần viết code và deploy do đội phát triển của doanh nghiệp hoặc đối tác kỹ thuật thực hiện, trừ khi có thỏa thuận riêng — [CẦN RED XÁC NHẬN] phạm vi thực thi kỹ thuật mà RED nhận trực tiếp.
Câu hỏi thường gặp
SEO kỹ thuật khác SEO Onpage ở điểm nào?
SEO kỹ thuật xử lý cơ chế: Googlebot có vào được không, trang có dựng được nội dung không, URL nào được chọn làm bản đại diện, máy chủ trả mã trạng thái gì. SEO Onpage xử lý nội dung: trang này phục vụ ý định tìm kiếm nào, cấu trúc tiêu đề ra sao, nội dung có đủ độ sâu cho truy vấn mục tiêu không. Một trang có thể hoàn hảo về Onpage nhưng không bao giờ xuất hiện vì bị chặn ở tầng kỹ thuật, và ngược lại.
Sửa hết lỗi kỹ thuật thì trang có được index không?
Không có bảo đảm. Tài liệu của Google nêu rõ các điều kiện kỹ thuật tối thiểu — không bị chặn crawl, trả HTTP 200, có nội dung lập chỉ mục được — là điều kiện để trang đủ tư cách được xét, không phải điều kiện bảo đảm được index. Sửa lỗi kỹ thuật gỡ bỏ rào cản; việc Google có index hay không phụ thuộc thêm nhiều yếu tố khác.
Đặt thẻ canonical có buộc Google phải chọn URL đó không?
Không. Google mô tả thẻ canonical do website khai báo là một tín hiệu được cân nhắc trong quá trình chọn URL đại diện. Google có thể chọn URL khác, đặc biệt khi các tín hiệu nội bộ mâu thuẫn nhau. Sau khi đặt canonical, cần dùng URL Inspection để kiểm tra canonical mà Google thực sự chọn.
Đưa URL vào sitemap có đảm bảo được crawl và index không?
Không. Sitemap giúp Google phát hiện URL, hữu ích với website lớn, website mới hoặc website ít liên kết ngoài. Tài liệu của Google nói rõ sitemap không bảo đảm URL sẽ được crawl hoặc index. Nộp lại sitemap chỉ là hành động phù hợp khi vấn đề nằm ở khâu phát hiện URL.
Website chạy JavaScript cần kiểm tra những gì?
Tối thiểu: nội dung chính có xuất hiện trong HTML đã render không, liên kết điều hướng có phải thẻ a kèm href không, các tài nguyên cần cho việc dựng trang có bị chặn trong robots.txt không, mỗi trạng thái nội dung có URL riêng truy cập trực tiếp được không, và các thẻ meta sinh bằng JavaScript có mâu thuẫn với HTML nguồn không. Kết quả kiểm tra quyết định phương án; không mặc định rằng mọi website JavaScript đều cần chuyển sang server-side rendering.
Core Web Vitals có phải là toàn bộ SEO kỹ thuật không?
Không. Hiệu năng là một phần trong chương trình kỹ thuật, nằm cạnh crawl, render, indexability, canonical, cấu trúc URL và quản trị thay đổi. Một website đạt ngưỡng Core Web Vitals vẫn có thể không xuất hiện trên kết quả tìm kiếm nếu bị chặn ở tầng crawl hoặc index. RED không cam kết rằng cải thiện Core Web Vitals sẽ làm tăng thứ hạng.
Gửi website để RED đánh giá phạm vi kỹ thuật
Nếu bạn đang gặp tình trạng trang không được index, lưu lượng giảm sau một lần deploy, hoặc nhận một bản audit hàng trăm lỗi mà không biết bắt đầu từ đâu, hãy gửi cho RED:
- Tên miền và nhóm URL quan trọng nhất với hoạt động kinh doanh
- Mục tiêu cụ thể của giai đoạn này
- Quyền truy cập Search Console (nếu chia sẻ được) và các báo cáo audit đã có
- Thông tin về nền tảng, framework và quy trình phát hành hiện tại
RED sẽ chạy chẩn đoán theo tầng và phản hồi bằng bản mô tả phạm vi công việc phù hợp với tình trạng thực tế của website. RED không cam kết thứ hạng, không cam kết trang sẽ được index và không đưa ra mốc thời gian phục hồi.