Astro SEO từng bước: render tĩnh hoặc render máy chủ, thẻ head, sitemap, hreflang, hình ảnh, JSON-LD và chuyển hướng, được đối chiếu với tài liệu chính thức.

Trên trang này
Tóm lại
Astro là một trong những framework web thân thiện nhất với công cụ tìm kiếm vì nó render sẵn các trang thành HTML thuần và không gửi JavaScript phía client trừ khi bạn yêu cầu. Nhờ vậy, Google và các bộ thu thập AI nhận được nội dung đầy đủ ngay ở yêu cầu đầu tiên. Tuy nhiên, Astro không tự viết SEO cho bạn: tiêu đề, mô tả meta, canonical, hreflang, dữ liệu có cấu trúc và chuyển hướng đều do bạn thêm, chủ yếu trong một component head dùng chung cộng với gói tích hợp sitemap chính thức.
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ả.
Astro SEO là công việc biến HTML sạch đó thành các trang có thể xếp hạng. Hướng dẫn cơ bản về SEO JavaScript của chính Google giải thích rằng Google xử lý website JavaScript qua ba giai đoạn (thu thập, render, lập chỉ mục) và khẳng định rằng “render phía máy chủ hoặc render trước vẫn là một ý tưởng tuyệt vời”, vì không phải bot nào cũng chạy được JavaScript. Astro xuất phát từ vị thế đó theo mặc định. Hướng dẫn này bao quát phần còn lại, từng thiết lập một, với mọi hành vi được đối chiếu với tài liệu chính thức của Astro. Để có bối cảnh, website sorank.com mà bạn đang đọc chạy trên Astro.
Có, về mặt kỹ thuật. Astro render các component thành HTML tại thời điểm build và loại bỏ JavaScript mà các framework như React hay Vue thường gửi xuống trình duyệt. Kết quả tránh được các vấn đề kinh điển được mô tả trong hướng dẫn SEO JavaScript của chúng tôi: vỏ HTML rỗng, nội dung chỉ xuất hiện sau khi render, liên kết không phải thẻ anchor thật. Nó cũng tránh được các bẫy định tuyến của ứng dụng một trang, vì mỗi route của Astro là một URL thật với file HTML riêng.
Điều Astro không làm cũng quan trọng không kém. Không có plugin SEO tích hợp sẵn, không có mô tả meta tự động, không có thẻ canonical tự động và không có dữ liệu có cấu trúc. Bảng dưới đây tách những gì bạn có sẵn khỏi những gì bạn phải tự xây.
| Yếu tố SEO | Astro cung cấp gì | Bạn cần thêm gì |
|---|---|---|
| HTML có thể thu thập | HTML đã render sẵn theo mặc định | Không cần gì, trừ khi bạn render nội dung chỉ ở phía client |
| Tiêu đề và mô tả meta | Phần head bạn kiểm soát trong mỗi layout | Một component SEO dùng chung nhận dữ liệu từ mỗi trang |
| Thẻ canonical | Astro.site và Astro.url để tạo URL tuyệt đối | Chính thẻ link, với dấu gạch chéo cuối nhất quán |
| Sitemap XML | Gói tích hợp chính thức @astrojs/sitemap | Cài đặt, thiết lập tùy chọn site, lọc các trang riêng tư |
| hreflang | Định tuyến i18n và tùy chọn i18n của sitemap | Thẻ alternate trong phần head của mỗi trang |
| Hình ảnh | Các component Image và Picture tối ưu hóa file | Văn bản alt mô tả, kích thước hợp lý |
| Dữ liệu có cấu trúc | Không có gì cụ thể | Script JSON-LD cho từng loại trang |
| Chuyển hướng | Tùy chọn redirects trong cấu hình | Chuyển hướng 301 thật ở tầng máy chủ cho bản build tĩnh |
Tài liệu Astro về render theo yêu cầu nói rõ: theo mặc định, các trang, route và endpoint API được render sẵn tại thời điểm build thành trang tĩnh. Với SEO, đầu ra tĩnh là lựa chọn mặc định an toàn nhất: mỗi URL là một file HTML hoàn chỉnh được phục vụ từ CDN, nhanh và giống hệt nhau với mọi khách truy cập và mọi bot.
Render theo yêu cầu (render máy chủ) cần một adapter cho máy chủ lưu trữ của bạn (ví dụ Node, Netlify, Vercel hoặc Cloudflare). Sau đó bạn có thể chọn riêng một route không render sẵn bằng export const prerender = false, hoặc chuyển cả dự án sang output: 'server' và bật lại render sẵn cho các trang tĩnh. Cả hai chế độ đều tạo ra HTML đầy đủ, nên Google thấy cùng một thứ. Khác biệt nằm ở những chỗ khác:
Quy tắc thực tế: giữ các trang tiếp thị, bài viết blog và tài liệu ở dạng tĩnh, và chỉ render theo yêu cầu những route cần dữ liệu trực tiếp. Tài liệu của Astro cũng khuyến nghị như vậy: giữ chế độ tĩnh mặc định cho đến khi phần lớn trang của bạn cần render theo yêu cầu.
Tạo một component SEO (thường gọi là BaseHead hoặc Seo) và đưa nó vào phần head của mọi layout. Nó nhận một tiêu đề, một mô tả, một hình ảnh tùy chọn và một cờ noindex tùy chọn, rồi xuất ra:
Trước hết, hãy đặt tùy chọn site trong astro.config.mjs: canonical, sitemap và các thẻ mạng xã hội đều phụ thuộc vào nó. Sau đó chọn một chính sách trailingSlash ('always' hoặc 'never') và giữ nhất quán, để /blog/post và /blog/post/ không bao giờ cạnh tranh nhau như hai phiên bản của cùng một trang. Chuỗi truy vấn nên được loại khỏi canonical để các tham số theo dõi không tạo ra bản trùng lặp.
Mẹo
Nếu bài viết của bạn nằm trong content collections, hãy biến tiêu đề và mô tả thành trường bắt buộc trong schema của collection. Khi đó quá trình build sẽ thất bại nếu tác giả quên mô tả meta, thay vì đưa một đoạn trích trống cho Google.
Dùng gói tích hợp chính thức được ghi trong trang @astrojs/sitemap. Chạy npx astro add sitemap sẽ cài đặt và thêm nó vào cấu hình. Gói này cần tùy chọn site và, khi build, ghi một file sitemap-index.xml trỏ đến các file đánh số (sitemap-0.xml, rồi nhiều file hơn với các site lớn). Mỗi file chứa tối đa 45,000 mục theo mặc định, do tùy chọn entryLimit quyết định. Nếu bạn mới làm quen với định dạng này, mục thuật ngữ của chúng tôi về sitemap XML giải thích Google xử lý nó thế nào.
Ba thiết lập quan trọng cho SEO:
Chú ý
Tài liệu nêu rõ rằng gói tích hợp không thể tạo mục sitemap cho các route động ở chế độ SSR. Nếu các trang sản phẩm hoặc bài viết của bạn được render theo yêu cầu, chúng sẽ thiếu trong sitemap trừ khi bạn render sẵn chúng hoặc tự thêm vào.
Với robots.txt, một file tĩnh trong thư mục public là đủ cho đa số website. Nếu nội dung khác nhau giữa staging và production, hãy tạo nó từ một endpoint (src/pages/robots.txt.ts). Trong cả hai trường hợp, thêm dòng Sitemap trỏ đến sitemap-index.xml, và kiểm tra kết quả bằng công cụ kiểm tra robots.txt trước khi ra mắt. Kỹ thuật endpoint đó cũng tạo ra file llms.txt; hướng dẫn của chúng tôi về cách cài đặt file llms.txt trình bày nội dung của nó.
Định tuyến i18n tích hợp sẵn của Astro lo phần URL. Trong cấu hình, bạn khai báo defaultLocale và danh sách locale, rồi chọn xem ngôn ngữ mặc định có thêm tiền tố hay không (prefixDefaultLocale). Các helper như getRelativeLocaleUrl tạo liên kết theo ngôn ngữ, còn Astro.currentLocale cho mỗi trang biết nó đang ở ngôn ngữ nào.
Hướng dẫn định tuyến không đề cập đến thẻ hreflang trong phần head, nên bạn cần tự viết chúng trong component SEO: với mỗi trang, một liên kết thay thế cho mỗi phiên bản ngôn ngữ, cộng thêm x-default, tất cả đều là URL tuyệt đối, và mọi phiên bản phải liệt kê tất cả các phiên bản khác (liên kết đối ứng). Sinh chúng từ cùng danh sách locale với định tuyến sẽ tránh được lỗi phổ biến nhất, một liên kết thay thế trỏ đến trang không tồn tại. Để kiểm tra logic trên vài URL, công cụ tạo hreflang của chúng tôi xuất ra bộ thẻ đầy đủ cho một trang. Sau đó, bật tùy chọn i18n của sitemap như một tín hiệu thứ hai.
Tốc độ là nơi Astro đạt được nhiều lợi thế nhất, và điều đó thể hiện trong Core Web Vitals. Hướng dẫn hình ảnh của Astro mô tả component Image từ astro:assets: nó tối ưu hóa hình ảnh cục bộ, chuyển đổi định dạng, xuất lazy loading và giải mã bất đồng bộ, và suy ra kích thước hình ảnh để tránh Cumulative Layout Shift. Thuộc tính alt là bắt buộc trên component này, điều này thực thi một quy tắc cơ bản của SEO hình ảnh. Component Picture đi xa hơn, phục vụ AVIF hoặc WebP với phương án dự phòng.
Hai thói quen hoàn thiện bức tranh. Giữ các hình ảnh cần tối ưu trong src (file trong public được phục vụ nguyên trạng, không xử lý gì). Và đừng lazy-load hình ảnh chính ở đầu trang: hãy để nó tải ngay (eager) để không làm chậm Largest Contentful Paint.
Kiến trúc island giúp kiểm soát JavaScript. Một component là HTML tĩnh cho đến khi bạn thêm một chỉ thị client: client:load hydrate nó ngay lập tức, client:idle khi trình duyệt rảnh, client:visible chỉ khi nó xuất hiện trong khung nhìn. Chỉ dành client:load cho những gì phải phản ứng ngay (menu, giỏ hàng) là cách đơn giản nhất để bảo vệ Interaction to Next Paint. Server island (server:defer) cho phép một khối cá nhân hóa tải sau trang đã cache mà không làm chậm nội dung chính.
Ghi chú
Một island chỉ ẩn tính tương tác của nó, không ẩn văn bản, miễn là component được render trên máy chủ trước. Nội dung được lấy trong trình duyệt sau khi tải là một trường hợp khác: các bộ thu thập không chạy JavaScript, bao gồm nhiều bộ thu thập AI, sẽ không thấy nội dung đó.
Astro không có tính năng schema tích hợp, nên bạn toàn quyền kiểm soát. Xây một object JavaScript cho từng loại trang (Article, Product, Organization, BreadcrumbList, FAQPage) và xuất nó trong một thẻ script kiểu application/ld+json, dùng chỉ thị set:html với JSON.stringify để JSON không bị escape. Lấy dữ liệu từ cùng frontmatter hoặc collection với trang hiển thị, để đánh dấu luôn khớp với những gì người dùng thấy, đó là yêu cầu trong nguyên tắc của Google về đánh dấu schema.
Để soạn JSON cho một loại trang mới, công cụ tạo schema miễn phí của chúng tôi cho bạn một khối khởi đầu hợp lệ, rồi bạn biến nó thành template. Sau mỗi thay đổi template, hãy kiểm tra một mẫu trang đã build bằng Rich Results Test của Google.
Việc chuyển từ WordPress hoặc Next.js là thời điểm rủi ro nhất đối với một website Astro. Giữ mọi URL có lượt truy cập hoặc backlink, và ánh xạ từng URL còn lại sang tương đương gần nhất bằng chuyển hướng vĩnh viễn, như đã giải thích trong hướng dẫn về chuyển hướng SEO của chúng tôi.
Cấu hình của Astro chấp nhận một object redirects ánh xạ đường dẫn cũ sang mới. Với một adapter máy chủ, chúng trở thành chuyển hướng HTTP thật. Với bản build tĩnh thuần túy, Astro ghi một trang HTML có meta refresh thay thế, mà Google vẫn theo nhưng coi là tín hiệu yếu hơn một 301 phía máy chủ. Với website tĩnh, hãy khai báo chuyển hướng theo định dạng riêng của máy chủ lưu trữ (file _redirects trên Netlify hoặc Cloudflare Pages, file vercel.json trên Vercel) để bộ thu thập nhận được 301 thật.
Việc được ChatGPT, Perplexity hoặc Gemini trích dẫn bắt đầu từ việc có thể đọc được. Nhiều bộ thu thập AI lấy HTML thô và không thực thi JavaScript, nên một website gửi toàn bộ văn bản trong phản hồi đầu tiên, như Astro làm theo mặc định, loại bỏ một rào cản mà các website render phía client vẫn còn. Tiêu đề rõ ràng, đoạn văn trả lời trước, dữ liệu có cấu trúc và file llms.txt sau đó giúp mỗi trang dễ được trích dẫn hơn.
Sau khi ra mắt, hãy đo lường thay vì đoán. Bảng điều khiển GEO và SEO của Sorank kết nối dữ liệu Search Console và lượt truy cập từ trợ lý AI của bạn, để bạn thấy website mới có giữ được vị trí không.

Chất lượng kỹ thuật chỉ có giá trị khi có nội dung để xếp hạng. Trình tạo bài viết blog AI của Sorank viết và đăng các bài viết tối ưu cho Google và trợ lý AI, đồng thời kết nối với một website tùy chỉnh như dự án Astro qua webhook.
Astro mang lại HTML có thể thu thập và nhanh theo mặc định; việc xếp hạng vẫn phụ thuộc vào thẻ head, sitemap, hreflang, dữ liệu có cấu trúc và chuyển hướng mà bạn thêm vào trên đó. Hãy thiết lập component SEO dùng chung và sitemap trước, rồi làm lần lượt theo bảng trên trước khi ra mắt.
Không. Astro không có plugin SEO tất cả trong một chính thức: bạn tự viết tiêu đề, mô tả meta, canonical và thẻ mạng xã hội trong một component head dùng chung. Gói tích hợp chính thức @astrojs/sitemap lo phần sitemap. Có các gói cộng đồng, nhưng một component nhỏ do bạn tự viết thì dễ bảo trì và hoàn toàn nằm trong tầm kiểm soát của bạn.
Cả hai đều có thể tạo ra HTML được render đầy đủ, nên Google lập chỉ mục tốt cả hai. Astro gửi ít JavaScript hơn đáng kể theo mặc định, nên thường giúp website nội dung nhanh hơn và cải thiện Core Web Vitals. Next.js phù hợp hơn với ứng dụng có nhiều tương tác; với blog, website tiếp thị và tài liệu, Astro là lựa chọn đơn giản hơn cho SEO.
Có. Một trang được render theo yêu cầu vẫn trả về HTML đầy đủ cho Googlebot, giống hệt một trang đã render sẵn. Điều cần lưu ý là thời gian phản hồi của máy chủ, ảnh hưởng đến tốc độ tải, và gói tích hợp sitemap, vốn không thể liệt kê các route động được render ở chế độ máy chủ trừ khi bạn tự thêm chúng.
HỌ ĐÃ THỬ SORANK TRƯỚC BẠN
