2015-01-28 17 views
6

Tôi đã nhận ra rằng ứng dụng ReactJS của tôi sử dụng bộ phản ứng-bộ định tuyến không có bất kỳ liên kết bên ngoài nào. Công cụ tìm kiếm không nhận ra rằng trang web có nhiều nội dung được liên kết. Prerender.io có vẻ như là một giải pháp tốt cho điều này, nhưng tôi không thể làm cho nó hoạt động cho ứng dụng ReactJS của tôi.Sử dụng prerender.io với ReactJS cho SEO

Có thể sử dụng prerender.io với ReactJS không? Nếu không, có cách nào khác để cải thiện SEO cho trang web của tôi mà không làm tất cả các phía máy chủ dựng hình?

EDIT: Khi tiếp tục đào, tôi nhận ra rằng vấn đề ở đây là router phản ứng sử dụng "#" theo mặc định và không phải là "#!". Có thể làm cho bộ định tuyến phản ứng hoạt động với "#!" Không?

+0

Tò mò, tôi không phải là nhà phát triển phản ứng, nhưng tôi có thể thấy [react-spa.herokuapp.com] (http://react-spa.herokuapp.com/discussions) làm việc với html5mode phản ứng-định tuyến –

+0

@ritmatter Vâng, chúng tôi cũng đã phải đối mặt với vấn đề này trong khi chúng tôi đang làm việc trên ứng dụng ReactJs cần tối ưu hóa SEO là tốt. Vui lòng kiểm tra tấm lò phản ứng của chúng tôi bằng cách sử dụng chúng tôi có thể tạo các ứng dụng web tự do SEO. https://github.com/Atyantik/react-pwa/. –

Trả lời

2

Đầu vào có vẻ như mong đợi các url thực, bởi vì nếu không bạn không thể phân phối html đã lưu vào người bình thường (mã băm không được gửi tới máy chủ).

Khi thiết lập phản ứng-router đảm bảo nó được sử dụng chế độ lịch sử:

Router.run(routes, Router.HistoryLocation, function (Handler) { 

Trong máy chủ của bạn, bạn sẽ cần phải đảm bảo rằng tất cả các tuyến mà không phù hợp với một tập tin tĩnh được phục vụ bởi một trong hai chỉ số gửi .html hoặc sử dụng kết xuất trước.

Bạn có thể tìm kiếm 'gửi tất cả yêu cầu tới index.html {chèn tên máy chủ tại đây}' để tìm chi tiết về điều này.


Dường như bởi PreRender mặc định chỉ áp dụng trong những tình huống nhất định. Dưới đây là một ví dụ nếu bạn đang sử dụng middleware express.js trong Node.js:

Bạn sẽ có thể tìm ra những thay đổi tương tự cho middleware khác (nó sẽ đòi hỏi một cái nĩa bằng các ngôn ngữ ít linh hoạt).

+0

Tôi đã thử điều này, nhưng nó vẫn không hoạt động. Đầu tiên dường như đã làm việc với một hashbang, thay vì một băm, nhưng tôi cũng không thể làm cho nó hoạt động theo cách đó. – ritmatter

+0

@ritmatter, tôi đã cập nhật câu trả lời của mình. Ngoài ra, vui lòng đọc tài liệu của họ ... họ khuyên bạn không nên sử dụng các url '#! '. – FakeRainBrigand

+0

Cảm ơn bạn đã cập nhật, tôi sẽ xem xét điều đó. Đề xuất sử dụng "#!" trong url đến trong thư trả lời từ [email protected] Có thể có hai chiến lược khác nhau không? – ritmatter

Các vấn đề liên quan