SEO cho lập trình viên: cách kết xuất trang để trình thu thập đọc được, trả về đúng mã HTTP, đặt các thẻ head thiết yếu, đạt Core Web Vitals và vẫn hiển thị với AI.

Trên trang này
Tóm lại
Với một lập trình viên, SEO nghĩa là làm cho mọi trang quan trọng có thể truy cập, được kết xuất và không mơ hồ đối với trình thu thập dữ liệu. Hãy phục vụ nội dung chính trong HTML ban đầu (kết xuất phía máy chủ hoặc tạo tĩnh), trả về mã trạng thái HTTP trung thực, đặt tiêu đề, mô tả meta, canonical và chỉ thị robots trong phản hồi của máy chủ, liên kết bằng các phần tử <a href> thực sự, đáp ứng ngưỡng Core Web Vitals và thêm dữ liệu có cấu trúc JSON-LD. Hầu hết trình thu thập AI không chạy JavaScript, nên nội dung chỉ xuất hiện sau bước hydration sẽ vô hình với ChatGPT, Claude và Perplexity.
Muốn tìm hiểu sâu hơn? Hãy hỏi
Bài trắc nghiệm nhanh
SEO có phù hợp với bạn không, và nên bắt đầu như thế nào?
Sorank phù hợp với câu trả lời của bạn
Thử nghiệm trong 3 ngày trên chính website của bạn và xem vị trí của bạn trên Google, ChatGPT và các AI khác.
Bắt đầu dùng thử miễn phí 3 ngày3 ngày miễn phí, sau đó bạn có thể dừng bất cứ lúc nào. Cam kết hoàn tiền trong 90 ngày nếu không có kết quả.
SEO cho lập trình viên là phần tối ưu hóa tìm kiếm nằm trong mã nguồn: template, định tuyến, kết xuất, header và hiệu năng. Người làm marketing chọn từ khóa và viết nội dung, nhưng một mã trạng thái sai, một route chỉ kết xuất ở phía client hay một thẻ noindex lạc chỗ có thể xóa sạch công việc đó chỉ trong một lần triển khai. Nền tảng về JavaScript SEO của chính Google mô tả ba giai đoạn (thu thập, kết xuất, lập chỉ mục), và mỗi giai đoạn có những lỗi mà chỉ lập trình viên mới sửa được. Hướng dẫn này đi qua chúng theo thứ tự chúng hỏng.
| Lĩnh vực | Trách nhiệm của lập trình viên | Triệu chứng thường gặp khi hỏng |
|---|---|---|
| Kết xuất | Nội dung chính và liên kết có sẵn trong HTML phía máy chủ | Trang được lập chỉ mục với nội dung trống hoặc thiếu |
| Mã trạng thái | 200, 301, 404, 410, 5xx được trả về đúng sự thật | Soft 404, trang lỗi bị lập chỉ mục, trang đã xóa vẫn xếp hạng |
| Thẻ head | Tiêu đề, mô tả, canonical, robots, hreflang duy nhất | Trùng lặp, URL sai được xếp hạng, trang biến mất khỏi chỉ mục |
| Kiểm soát thu thập | robots.txt, sitemap XML, liên kết nội bộ, tham số | Trang quan trọng không được phát hiện, ngân sách thu thập bị lãng phí vào bộ lọc |
| Hiệu năng | Core Web Vitals trên người dùng di động thật | Trải nghiệm trang kém, tỷ lệ chuyển đổi thấp hơn |
| Dữ liệu có cấu trúc | JSON-LD hợp lệ và khớp với nội dung hiển thị | Không có kết quả mở rộng, nhầm lẫn về thực thể |
| Truy cập AI | Cho phép các user agent AI, nội dung đọc được mà không cần JavaScript | Thương hiệu vắng mặt trong câu trả lời của ChatGPT và Perplexity |
Googlebot có kết xuất JavaScript, nhưng ở bước thứ hai có thể bị trì hoãn, và chính Google viết rằng “kết xuất phía máy chủ hoặc kết xuất trước vẫn là một ý tưởng rất hay”, vì nó nhanh hơn cho người dùng lẫn trình thu thập, và vì không phải bot nào cũng chạy JavaScript. Điểm cuối cùng này giờ quan trọng hơn bao giờ hết: trong phân tích tháng 12 năm 2024 The rise of the AI crawler, Vercel nhận thấy rằng “hiện không có trình thu thập AI lớn nào kết xuất JavaScript”, kể tên GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot và PerplexityBot cùng những bot khác. Gemini, vốn dùng hạ tầng của Google, là ngoại lệ.
| Chế độ kết xuất | Thứ trình thu thập nhận được | Mức phù hợp với SEO |
|---|---|---|
| Kết xuất phía client (CSR) | Một khung HTML gần như rỗng, nội dung xuất hiện sau khi JavaScript chạy | Yếu: bị trì hoãn với Google, vô hình với hầu hết trình thu thập AI |
| Kết xuất phía máy chủ (SSR) | HTML đầy đủ cho mỗi yêu cầu | Mạnh cho trang động |
| Tạo tĩnh (SSG) | HTML đầy đủ được tạo khi triển khai | Mạnh nhất cho nội dung ít thay đổi |
| Tái tạo gia tăng (ISR) | HTML tĩnh được làm mới theo lịch hoặc khi có yêu cầu | Mạnh cho danh mục lớn và blog |
Hai quy tắc áp dụng bất kể framework nào. Liên kết phải là các phần tử <a> có thuộc tính href: Google nói rằng họ chỉ phát hiện được liên kết ở dạng đó, nên các nút có trình xử lý click và route dựa trên fragment là ngõ cụt. Và mỗi route cần một URL riêng, không có #, trả về nội dung của nó trực tiếp. Các bài hướng dẫn của chúng tôi về JavaScript SEO, SEO cho ứng dụng một trang và SEO cho Next.js đi sâu vào các chi tiết riêng của từng framework.
Mã trạng thái là chỉ dẫn dành cho trình thu thập. Tài liệu của Google về mã trạng thái HTTP và lỗi mạng mô tả cách xử lý từng nhóm:
Kiểm tra máy chủ thực sự gửi gì bằng công cụ kiểm tra header HTTP, và giữ chuỗi chuyển hướng ở một bước duy nhất: bài viết của chúng tôi về chuyển hướng SEO trình bày các mẫu di chuyển.
Mỗi trang có thể lập chỉ mục đều cần một tiêu đề và một mô tả duy nhất, một canonical tự tham chiếu và, trên các site đa ngôn ngữ, các chú thích hreflang. Hãy giữ chúng trong phản hồi của máy chủ:
<title>Giày chạy bộ cho bàn chân bẹt | Example</title>
<meta name="description" content="Lựa chọn đã thử nghiệm, kích cỡ và giá cả.">
<link rel="canonical" href="https://example.com/running-shoes-flat-feet">
<link rel="alternate" hreflang="fr" href="https://example.com/fr/chaussures-pieds-plats">
<meta name="robots" content="index, follow">Thẻ canonical phải trỏ đến URL bạn muốn xếp hạng, với đúng giao thức, tên máy chủ và quy ước dấu gạch chéo cuối mà site của bạn dùng.
Lưu ý
Đừng bao giờ dựa vào JavaScript để gỡ bỏ noindex. Google nói rằng khi thấy thẻ noindex, họ có thể bỏ qua bước kết xuất, nên một trang gửi noindex trong HTML rồi gỡ nó ở phía client vẫn có thể nằm ngoài chỉ mục.
Công cụ tìm kiếm lập chỉ mục URL, nên cấu trúc URL là một quyết định SEO. Dùng đường dẫn chữ thường, phân tách bằng dấu gạch ngang và dễ đọc; chọn một quy ước dấu gạch chéo cuối và chuyển hướng quy ước còn lại; và giữ một URL cho mỗi nội dung. Bộ lọc, sắp xếp và tham số theo dõi nhân bản URL mà không thêm nội dung: hãy đưa chúng về phiên bản sạch bằng canonical, và đừng liên kết đến các tổ hợp tham số mà bạn không muốn được thu thập.
Liên kết nội bộ mang cả chức năng khám phá lẫn mức độ quan trọng. Hãy kết xuất điều hướng, breadcrumb và các khối nội dung liên quan ở phía máy chủ, cho danh sách phân trang các liên kết thường đến từng trang, và tránh cuộn vô hạn mà không có URL phân trang phía sau. Một sản phẩm hay bài viết chỉ truy cập được qua tìm kiếm trên site hoặc bộ lọc JavaScript thì với trình thu thập là một trang mồ côi.
robots.txt kiểm soát việc thu thập, không kiểm soát lập chỉ mục: một URL bị chặn vẫn có thể xuất hiện trong kết quả nếu các trang khác liên kết đến nó. Để giữ một trang khỏi chỉ mục, hãy cho phép thu thập và trả về noindex. Tạo sitemap XML từ route hoặc cơ sở dữ liệu, chỉ liệt kê các URL canonical trả về 200, và chỉ cập nhật lastmod khi nội dung thực sự thay đổi. Kiểm tra quy tắc bằng công cụ kiểm tra robots.txt trước mỗi lần phát hành, và đừng bao giờ đưa robots.txt của môi trường staging có “Disallow: /” lên production.
Google dùng Core Web Vitals như một phần trong các tín hiệu trải nghiệm trang. Theo web.dev, một trang được coi là tốt khi đáp ứng các ngưỡng sau ở phân vị 75 của các lượt tải trang thật, trên di động và máy tính để bàn:
| Chỉ số | Đo lường | Ngưỡng tốt | Cách khắc phục thường gặp của lập trình viên |
|---|---|---|---|
| LCP (Largest Contentful Paint) | Tốc độ tải | 2.5 s trở xuống | Preload ảnh chính, kết xuất phía máy chủ nội dung phía trên màn hình, dùng CDN |
| INP (Interaction to Next Paint) | Khả năng phản hồi | 200 ms trở xuống | Chia nhỏ tác vụ dài, trì hoãn script bên thứ ba, giảm chi phí hydration |
| CLS (Cumulative Layout Shift) | Độ ổn định hình ảnh | 0.1 trở xuống | Đặt width và height cho media, dành sẵn chỗ cho quảng cáo và nhúng |
INP thay thế First Input Delay làm Core Web Vital ổn định vào năm 2024. Dùng dữ liệu thực tế (Search Console, Chrome UX Report) để đánh giá, và công cụ đo trong phòng thí nghiệm để gỡ lỗi. Mục từ điển của chúng tôi về Core Web Vitals liệt kê các công cụ.
Dùng JSON-LD trong thẻ script, được kết xuất ở phía máy chủ, mô tả những gì hiển thị trên trang:
<script type="application/ld+json">
{"@context": "https://schema.org", "@type": "Article",
"headline": "Giày chạy bộ cho bàn chân bẹt",
"datePublished": "2026-10-01",
"author": {"@type": "Person", "name": "Jane Doe"}}
</script>Tạo nó từ cùng dữ liệu với trang để hai bên không bao giờ lệch nhau, kiểm tra tính hợp lệ trong CI, và tránh chèn nó qua trình quản lý thẻ. Một công cụ tạo schema cung cấp mẫu khởi đầu cho các loại phổ biến.
Mẹo
Thêm các kiểm tra SEO vào quy trình của bạn: làm build thất bại nếu một template có thể lập chỉ mục không có tiêu đề hoặc canonical, nếu một route trả về 200 cho slug không tồn tại, hoặc nếu robots.txt production chứa “Disallow: /”. Những lỗi hồi quy này rẻ để bắt trước khi triển khai và tốn kém sau khi triển khai.
Khả năng hiển thị với AI bắt đầu từ quyền truy cập. Quyết định user agent AI nào được phép (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot và các bot khác) và viết quy tắc rõ ràng trong robots.txt; hướng dẫn về robots.txt cho trình thu thập AI của chúng tôi giải thích sự khác biệt giữa bot huấn luyện và bot tìm kiếm. Sau đó, hãy đảm bảo văn bản, giá, thông số và FAQ có trong HTML ban đầu, dùng tiêu đề và bảng mang ý nghĩa ngữ nghĩa thay vì ảnh chụp chữ, và giữ trang đủ nhẹ để tải nhanh. Tệp llms.txt có thể tóm tắt các trang chính cho công cụ AI, nhưng chưa trợ lý lớn nào xác nhận dựa vào nó, nên hãy coi đó là tùy chọn.
Sorank là sản phẩm của chúng tôi: phần mềm SEO và GEO autopilot. Lập trình viên thường gặp nó qua các tích hợp: nó đăng bài lên WordPress, Shopify, Webflow hoặc Wix, hoặc lên bất kỳ stack tùy chỉnh nào qua webhook, như mô tả trên trang cài đặt. Trò chuyện SEO của nó trả lời câu hỏi về site của bạn ngay trong cuộc trò chuyện, và theo dõi lượt nhắc đến AI kiểm tra mỗi tháng xem ChatGPT, Claude và Gemini có trích dẫn thương hiệu của bạn không.

Tóm lại: hãy gửi HTML đầy đủ, mã trạng thái trung thực và thẻ head đúng từ máy chủ, rồi đo hiệu năng trên người dùng thật. Cách này phục vụ được Googlebot và các trình thu thập AI không chạy JavaScript. Để lấp đầy một site được xây dựng tốt bằng nội dung xếp hạng được, xem các gói của Sorank, từ 49 USD mỗi tháng với 3 ngày dùng thử miễn phí.
Với Google thì không phải lúc nào cũng vậy, vì Google có kết xuất JavaScript, nhưng nó làm tăng độ trễ và rủi ro, và hầu hết trình thu thập AI hoàn toàn không chạy JavaScript. Với các trang cần xếp hạng hoặc được trích dẫn, hãy phục vụ nội dung chính và liên kết trong HTML ban đầu bằng kết xuất phía máy chủ, tạo tĩnh hoặc kết xuất trước, và chỉ giữ kết xuất phía client cho các phần tương tác.
Cả hai đều cho Google biết trang đã không còn, và trong cả hai trường hợp Google dần ngừng sử dụng URL. 410 cho biết việc gỡ bỏ là có chủ đích và vĩnh viễn, điều mà một số đội thích dùng cho nội dung đã xóa cố ý. Điều quan trọng nhất là đừng trả về 200 kèm thông báo lỗi, vì điều đó tạo ra soft 404.
Chúng là một phần trong các tín hiệu trải nghiệm trang của Google, mà Google mô tả là một yếu tố trong nhiều yếu tố, với mức độ liên quan và chất lượng nội dung nặng ký hơn. Trong thực tế, chúng đóng vai trò phân xử giữa các trang tương tự và có ảnh hưởng mạnh đến tỷ lệ chuyển đổi, nên đáp ứng các ngưỡng là đáng công sức.
HỌ ĐÃ THỬ SORANK TRƯỚC BẠN
