Google phát hiện và xử lý trang
Discover→
Crawl→
Index→
Serve
| Giai đoạn | Dev có thể làm gì? |
|---|---|
| Discover | Internal links, Sitemap |
| Crawl | HTTP / robots.txt, HTML và JS render |
| Index | Noindex / canonical, HTML và metadata |
| Serve | Title / snippet, Schema / hreflang |
LỖI THƯỜNG GẶP
- Có sitemap là mọi URL được index.
- Trả 200 nghĩa là đã có trên Google.
CÁCH LÀM ĐÚNG
- Google tải và phân tích trước khi index.
- Serve xảy ra khi người dùng tìm kiếm.
Domain, HTTPS và dạng URL chuẩn
LỖI THƯỜNG GẶP
- HTTP, HTTPS, www và non-www đều trả 200.
- /a và /a/ cùng nội dung nhưng tồn tại song song.
- Domain phụ redirect mọi đường dẫn về homepage.
http://www.example.com/about
CÁCH LÀM ĐÚNG
- Chọn hostname, HTTPS và quy ước dấu / nhất quán.
- 301/308 các biến thể về URL chuẩn tương ứng.
- Link nội bộ, sitemap và canonical cùng một dạng.
https://example.com/about/
Status code và trang không tồn tại
LỖI THƯỜNG GẶP
- Trang "Not found" vẫn trả HTTP 200.
- Xóa mọi trang sản phẩm vừa ngừng bán.
- Lỗi server trên cả nhóm trang bị bỏ sót.
HTTP/1.1 200 OK
<h1>Không tìm thấy trang</h1>
CÁCH LÀM ĐÚNG
- Trang mất hẳn, không có bản thay thế: 404/410.
- Giữ 200 nếu trang vẫn có nội dung hữu ích.
- Giám sát 5xx, kiểm tra theo từng loại template.
HTTP/1.1 404 Not Found
<h1>Không tìm thấy trang</h1>
Redirect và đường dẫn sau migrate
LỖI THƯỜNG GẶP
- Đổi slug vĩnh viễn nhưng dùng redirect tạm.
- Chuỗi /a tới /b, rồi /b tới /c.
- Menu vẫn trỏ URL cũ đang redirect.
/a 301 /b
/b 301 /c
CÁCH LÀM ĐÚNG
- 301/308 khi đổi vĩnh viễn, 302/307 khi tạm.
- Cho các URL cũ tới thẳng URL cuối phù hợp.
- Cập nhật link nội bộ và sitemap về URL cuối.
/a 301 /c
/b 301 /c
robots.txt: kiểm soát crawl
LỖI THƯỜNG GẶP
- Dùng Disallow để xóa URL khỏi Google.
- Chặn /assets/ chứa CSS và JavaScript cần render.
- Mang Disallow: / từ staging lên production.
User-agent: *
Disallow: /assets/
CÁCH LÀM ĐÚNG
- Dùng robots.txt để điều khiển việc crawl.
- Cho phép tải tài nguyên cần để hiểu trang.
- Kiểm tra rule áp dụng cho đúng hostname và bot.
User-agent: *
Disallow: /admin/
noindex: kiểm soát việc index
LỖI THƯỜNG GẶP
- Chặn crawl rồi chờ Google đọc noindex.
- Dùng noindex để bảo vệ dữ liệu riêng tư.
- HTML có noindex, JavaScript mới gỡ bỏ.
CÁCH LÀM ĐÚNG
- Trang công khai cần noindex phải crawl được.
- Dùng meta robots hoặc X-Robots-Tag phù hợp.
- Đặt chỉ thị theo môi trường từ server.
<!-- HTML -->
<meta name="robots" content="noindex">
HTTP header: X-Robots-Tag: noindex
Staging và cấu hình khi deploy
LỖI THƯỜNG GẶP
- Staging nội bộ mở công khai, chỉ chặn robots.
- Production giữ noindex của staging.
- Chỉ kiểm tra homepage sau khi deploy.
APP_ENV=production
X-Robots-Tag: noindex
CÁCH LÀM ĐÚNG
- Staging riêng tư dùng auth hoặc access control.
- Tách biến môi trường, kiểm tra bản production.
- Kiểm tra cả homepage, trang danh sách và trang con.
Staging: HTTP auth / giới hạn IP
Production: đúng index policy
XML sitemap
LỖI THƯỜNG GẶP
- Có URL redirect, 404 hoặc noindex trong sitemap.
- Mọi lastmod đổi theo ngày build/deploy.
- Gửi sitemap rồi coi như đã được index.
CÁCH LÀM ĐÚNG
- Liệt kê URL chuẩn, trả 200 và muốn được index.
- lastmod: chính xác, nhất quán với thay đổi thực tế.
- Khai báo sitemap và kiểm tra khả năng truy cập.
<url>
<loc>https://example.com/news/story/</loc>
<lastmod>2026-10-27T09:15:00+07:00</lastmod>
</url>
Google bỏ qua <priority> và <changefreq>.
Canonical và tham số theo dõi
LỖI THƯỜNG GẶP
- Canonical trỏ staging, 404 hoặc URL redirect.
- Theme và plugin xuất canonical mâu thuẫn.
- UTM tạo một canonical riêng cho từng biến thể.
CÁCH LÀM ĐÚNG
- Đề xuất URL đại diện hoạt động, đủ điều kiện index.
- Xuất một canonical nhất quán, ưu tiên URL tuyệt đối.
- Tham số chỉ theo dõi: canonical về URL sạch.
<!-- Trang có ?utm_source=facebook, nội dung không đổi -->
<link rel="canonical" href="https://example.com/blog/story/">
Phân trang và URL bộ lọc
LỖI THƯỜNG GẶP
- Trang 2, 3 đều canonical về trang 1.
- Infinite scroll không có URL/link tới phần sau.
- Mọi tổ hợp bộ lọc đều được mở crawl không kiểm soát.
CÁCH LÀM ĐÚNG
- Mỗi trang phân trang có URL và canonical riêng.
- Có link <a href> tới các trang tiếp theo.
- Chọn chính sách bộ lọc theo giá trị và độ trùng.
Trang 2: https://example.com/news/?page=2
Canonical: https://example.com/news/?page=2
HTML ban đầu và rendered DOM
LỖI THƯỜNG GẶP
- Nội dung chính chỉ tải khi bấm "Xem thêm".
- HTML và DOM xuất canonical hoặc robots khác nhau.
- Chỉ nhìn giao diện browser rồi kết luận bot thấy đủ.
onClick = () => fetchDescription()
CÁCH LÀM ĐÚNG
- Ưu tiên server output cho nội dung quan trọng.
- Nếu dùng JS, tải nội dung mà không cần thao tác.
- Đối chiếu response, DOM và công cụ kiểm tra URL.
Nội dung chính có khi mở URL
Metadata nhất quán sau render
Internal links và URL đích
LỖI THƯỜNG GẶP
- Dùng onClick trên div để chuyển trang.
- Link cũ tương đối resolve sai sau migrate.
- Menu/breadcrumb dẫn tới URL hỏng hoặc redirect.
<div onclick="go()">Dịch vụ</div>
CÁCH LÀM ĐÚNG
- Component điều hướng xuất <a href> thật.
- Resolve URL đúng, dùng quy ước link nhất quán.
- Trỏ thẳng tới URL đích phù hợp đang hoạt động.
<a href="/services/">Dịch vụ</a>
Title và meta description
LỖI THƯỜNG GẶP
- Theme và plugin cùng xuất description.
- Mọi trang dùng title mặc định hoặc tên site cũ.
- CMS có field SEO nhưng template không đọc.
CÁCH LÀM ĐÚNG
- Mỗi trang một title, một description phù hợp.
- Đọc field SEO trước, fallback theo dữ liệu trang.
- Loại bỏ phần xuất trùng, kiểm tra nhiều template.
const title = post.seoTitle || `${post.title} | Brand`;
const description = post.seoDescription || post.excerpt;
Heading và cấu trúc HTML
LỖI THƯỜNG GẶP
- Card dùng h4 chỉ vì thiết kế muốn chữ nhỏ.
- Logo là h1 trên mọi trang, lẫn với tiêu đề chính.
- Tên trang chỉ là div, heading lồng trong heading.
<h4 class="card-title">Tin mới</h4>
<!-- Chọn h4 chỉ vì font nhỏ -->
CÁCH LÀM ĐÚNG
- Chọn heading theo cấu trúc section chứa nội dung.
- Quy ước team: một h1 chính, CSS chỉnh cỡ chữ.
- Heading mô tả phân cấp, markup hợp lệ.
<h2>Tin liên quan</h2>
<h3 class="card-title">Tin mới</h3>
Ảnh nội dung và thuộc tính alt
LỖI THƯỜNG GẶP
- Ảnh nội dung thiếu alt hoặc dùng tên file làm alt.
- Icon trang trí bị nhồi từ khóa.
- Ảnh chỉ xuất hiện như background hoặc sau thao tác.
CÁCH LÀM ĐÚNG
- Ảnh có thông tin dùng img, alt theo ngữ cảnh.
- Ảnh thuần trang trí dùng alt="" khi phù hợp.
- URL ảnh truy cập được, bot tìm thấy qua markup.
<img src="/uploads/team.jpg" alt="Đội ngũ tại văn phòng Sydney">
<img src="/icons/arrow.svg" alt="">
Structured data: dữ liệu phải đúng
LỖI THƯỜNG GẶP
- Schema dùng URL staging hoặc ngày hiện tại.
- Theme/plugin xuất dữ liệu mâu thuẫn.
- JSON-LD hợp lệ là chắc chắn có rich result.
CÁCH LÀM ĐÚNG
- Chọn type đúng, map dữ liệu thật của trang.
- Giá, đánh giá, tác giả và ngày khớp nội dung.
- Kiểm tra cú pháp và yêu cầu tính năng Google.
"datePublished": "2026-10-27T09:15:00+07:00",
"dateModified": "2026-10-28T10:00:00+07:00"
Schema nên kiểm tra theo loại trang
Chọn theo loại trang, không phải bộ schema bắt buộc cho mọi website.
| Schema | Lỗi thường gặp | Cách làm đúng |
|---|---|---|
| WebSite | Thiếu tên website ở homepage. | Homepage: tên và URL site. |
| Organization | Hai tên hoặc logo mâu thuẫn. | Homepage/About: đơn vị, logo, liên hệ đúng. |
| BreadcrumbList | URL cũ hoặc phân cấp không khớp website. | Đúng phân cấp và URL chuẩn. |
| Article / subtype | Mọi trang đều là Article, ngày đăng đổi mỗi lần tải. | Bài viết: Article, NewsArticle hoặc BlogPosting phù hợp. |
| LocalBusiness | Gắn cho mọi website, địa chỉ không đúng. | Địa điểm kinh doanh thực tế, dùng subtype phù hợp. |
| Product | Giá hoặc tình trạng hàng khác nội dung trang. | Trang sản phẩm, dữ liệu bán hàng thật. |
Đa ngôn ngữ: URL, lang và metadata
LỖI THƯỜNG GẶP
- Đổi ngôn ngữ trên cùng URL chỉ bằng cookie.
- Layout cố định lang="en" cho bản tiếng Việt.
- Meta và link nội bộ vẫn dùng dữ liệu bản gốc.
Một URL, đổi nội dung theo cookie
CÁCH LÀM ĐÚNG
- Mỗi bản có URL riêng, truy cập độc lập.
- html lang khớp ngôn ngữ nội dung.
- Metadata và navigation theo đúng locale.
/en/about/
/vi/about/
<html lang="vi">
Hreflang, canonical và sitemap
LỖI THƯỜNG GẶP
- Chỉ EN trỏ VI, thiếu liên kết ngược.
- Bản VI canonical về EN dù là bản dịch độc lập.
- Mọi hreflang trỏ homepage hoặc URL chưa tồn tại.
CÁCH LÀM ĐÚNG
- Mỗi bản có self và return links đúng cặp trang.
- Bản dịch độc lập thường canonical về chính nó.
- Sitemap chứa URL chuẩn của các bản muốn index.
<link rel="alternate" hreflang="vi" href="https://example.com/vi/about/">
<link rel="alternate" hreflang="en" href="https://example.com/en/about/">
Bảo trì website trong thời gian ngắn
LỖI THƯỜNG GẶP
- Trang bảo trì trả 200 thay nội dung mọi trang.
- Tạm trả 404 hoặc redirect toàn site về homepage.
- Trả 503 cho cả robots.txt.
CÁCH LÀM ĐÚNG
- Trang tạm không phục vụ được: trả 503.
- Có thể kèm Retry-After, hiển thị thông báo rõ.
- Giữ robots.txt hoạt động, khôi phục sau bảo trì.
HTTP/1.1 503 Service Unavailable
Retry-After: 7200
SEO cho AI Search
LỖI THƯỜNG GẶP
- Google AI Search bắt buộc có llms.txt hoặc schema riêng.
- Nội dung quan trọng chỉ có trong ảnh hoặc sau click.
- Thêm vài thẻ là chắc chắn được AI trích dẫn.
CÁCH LÀM ĐÚNG
- Google: trang được index và cho phép snippet.
- Cung cấp nội dung chính dạng text, bot truy cập được.
- Đo hiển thị / trích dẫn theo từng nền tảng.
Google Search Console: Generative AI performance (Search / Discover).
Bing Webmaster Tools: AI Performance.
Kiểm tra SEO sau deploy
LỖI THƯỜNG GẶP
- Chỉ mở homepage bằng browser rồi kết luận xong.
- Sửa code nhưng chưa kiểm tra HTML/headers thật.
- Request indexing nghĩa là chắc chắn được index.
CÁCH LÀM ĐÚNG
- Kiểm tra URL đại diện của từng loại trang.
- Xác minh status, robots, canonical và rendered DOM.
- Dùng URL Inspection của Google và Bing để đối chiếu.
Kiểm tra URL thật, rồi theo dõi crawl/index lại.
Live test và dữ liệu đã index là hai nguồn khác nhau.
Google: kiểm tra nosnippet / max-snippet:0.
Search Console: Settings > Search generative AI > Include.