2013-08-25 25 views

Odpowiedz

6

O ile wiem, w Durandalu 2.0 nie można tego zrobić. Wtyczka router i history nie obsługuje tego i nie będzie łatwa, ponieważ w kodzie są pewne miejsca, które polegają na #.

Jednak nie sądzę, że jest to problem w twoim scenariuszu. Być może musisz zmienić sposób radzenia sobie z wymogiem indeksowania aplikacji.

nadal można dokonać SEO aplikacja kompatybilna z użyciem # określając rodzaj meta fragment w głównym HTML aplikacji:

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

Więc mówisz google, że linki nie mają #! ale że aplikacja używa renderowania JavaScript. Następnie żądania od robota będą obejmować: ?_escaped_fragment_.

Więc w aplikacji można użyć:

mysite.com/#myroute 

i robot będzie żądać:

mysite.com?_escaped_fragment_=myroute 

Sprawdź Sekcja 3 Google documentation on crawling wiedzieć więcej o meta tagu fragmentów.

PROPOZYCJA

Jeśli chcesz, aby w pełni skorzystać z tej funkcji Moim przy użyciu pushState w Durandal 2,0 aktywując router tak:

router.activate({ pushState: true }); 

I również w tym meta tagu fragmentów.

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

Co należy wziąć pod uwagę w przypadku korzystania pushState:

  • Zastosowanie pushState tylko wtedy, gdy nie planuje wspierać starych przeglądarek.

  • Trzeba dokonać po stronie serwera pushState gotowy, oznacza to, że gdy serwer jest proszony o mysite.com/myroutepowinna być w stanie wrócić tą samą aplikację JS i niech proces klienta parametrów ciąg kwerendy. Na przykład można to osiągnąć za pomocą przepisywania adresu URL IIS, jeśli korzystasz z ASP.NET. Jest dobry blog post na ten temat.

+1

Znakomicie napisana odpowiedź. Dziękuję, to mi bardzo pomoże. – ccorrin

+0

Mam szybkie pytanie, myślę, że mam to działa teraz, ale kiedy przesyłam moją stronę do google, i podaję linki do google, muszę dać to http://mysite.com/#! lub po prostu http://mysite.com i google doda _escaped_fragment_, ponieważ mam go w metatagu? – ccorrin

+0

Powiedziałbym, że mysite.com tylko .. – margabit