2013-08-25 30 views
10

Có thể thay thế hành vi bộ định tuyến mặc định trong Durandal 2.0 để thay thế tuyến mặc định cho ví dụ: 'mysite.com/#/myroute' với 'mysite.com/#!/myroute' lý do là vì để các spider google để phát hiện các trang là ajax thu thập dữ liệu-có thể, tôi cần phải chèn một hashbang trong url không chỉ là một hashtag. Mọi sự trợ giúp sẽ rất được trân trọng.Bộ định tuyến Durandal 2.0 bạn có thể thay thế # cho #! cho mục đích thu thập dữ liệu web ajax?

Cảm ơn!

Trả lời

6

Theo như tôi biết, trong Durandal 2.0 bạn không thể thực hiện việc này. Plugin routerhistory không hỗ trợ điều này và nó sẽ không dễ dàng vì có một số vị trí trong mã dựa trên #.

Tuy nhiên, tôi không nghĩ đây là vấn đề trong kịch bản của bạn. Có thể bạn cần phải thay đổi cách để giải quyết yêu cầu làm cho ứng dụng của bạn có thể thu thập thông tin.

Bạn vẫn có thể làm cho ứng dụng SEO của bạn tương thích sử dụng # bằng cách xác định các loại đoạn meta trong HTML chính của ứng dụng:

<meta name="fragment" content="!"> 

Vì vậy, bạn đang nói với google rằng các liên kết của bạn không có #! nhưng ứng dụng đang sử dụng hiển thị JavaScript. Sau đó, các yêu cầu từ trình thu thập thông tin sẽ bao gồm ?_escaped_fragment_.

Vì vậy, trong ứng dụng của bạn, bạn sẽ sử dụng:

mysite.com/#myroute 

và trình thu thập sẽ yêu cầu:

mysite.com?_escaped_fragment_=myroute 

Kiểm tra các mục 3 của Google documentation on crawling để biết thêm về thẻ đoạn meta.

SUGGESTION

Nếu bạn muốn tận dụng tối đa các tính năng này, tôi đề nghị sử dụng pushState trong Durandal 2.0 bằng cách kích hoạt các bộ định tuyến như thế này:

router.activate({ pushState: true }); 

Và cũng bao gồm thẻ đoạn meta.

<meta name="fragment" content="!"> 

Những điều bạn nên cân nhắc nếu sử dụng pushState:

  • Sử dụng pushState chỉ nếu bạn không có kế hoạch hỗ trợ các trình duyệt cũ.

  • Bạn cần phải thực hiện pushState phía máy chủ của bạn đã sẵn sàng, điều này có nghĩa là khi máy chủ được yêu cầu với mysite.com/myroutesẽ có thể trả lại ứng dụng JS cùng và để cho các quá trình khách hàng các thông số chuỗi truy vấn. Ví dụ, điều này có thể đạt được bằng cách sử dụng IIS URL viết lại nếu bạn đang sử dụng ASP.NET. Có một số blog post tốt về chủ đề này.

+1

Phản hồi bằng văn bản rõ ràng tuyệt vời. Cảm ơn bạn, điều này sẽ giúp tôi rất nhiều. – ccorrin

+0

Tôi có một câu hỏi nhanh, tôi nghĩ rằng tôi đã làm việc này ngay bây giờ nhưng khi tôi gửi trang web của tôi đến google, và cung cấp liên kết đến google tôi cần phải cung cấp cho nó http://mysite.com/#! hoặc chỉ http://mysite.com và google sẽ thêm vào _escaped_fragment_ bởi vì tôi có nó trong thẻ meta? – ccorrin

+0

Tôi sẽ nói mysite.com chỉ .. – margabit

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