2016-02-27 42 views
6

Sto utilizzando React e React Router nella mia applicazione web a pagina singola. Dato che sto facendo rendering lato client, mi piacerebbe servire tutti i miei file statici (HTML, CSS, JS) con un CDN. Sto usando Amazon S3 per ospitare i file e Amazon CloudFront come CDN.React Router + AWS Backend, how to SEO

Quando l'utente richiede /css/styles.css, il file esiste in modo che S3 lo serva. Quando l'utente richiede/foo/bar, questo è un URL dinamico in modo che S3 aggiunga un hashbang:/#!/Foo/bar. Questo servirà index.html. Sul mio lato client rimuovo l'hashbang, quindi i miei URL sono belli.

Questo funziona perfettamente per il 100% dei miei utenti.

  • Tutti i file statici sono serviti attraverso una CDN
  • un URL dinamico sarà indirizzato a/#!/{...} che serve index.html (la mia applicazione singola pagina)
  • mio lato client rimuove il hashbang modo gli URL sono abbastanza nuovo

il problema

il problema è che Google non esegue la scansione il mio sito web. Ecco perché:

  • Google richiede/
  • vedono un sacco di link, per esempio a/foo/bar
  • Google richieste/foo/bar
  • Ottengono reindirizzati a/#!/foo/bar (302 Found)
  • Essi rimuovere il hashbang e richiesta/

Perché l'hashbang viene rimosso? La mia app funziona perfettamente per il 100% dei miei utenti, quindi perché è necessario riprogettarlo in modo tale che Google possa eseguirne la scansione correttamente? E 'il 2016, basta seguire il hashbang ...

</rant >

sto facendo qualcosa di sbagliato? C'è un modo migliore per far sì che S3 funzioni index.html quando non riconosce il percorso?

Configurare un server di nodi per gestire questi percorsi non è la soluzione corretta poiché ciò vanifica l'intero scopo di avere un CDN.

In this thread Michael Jackson, il principale contributore di React Router, afferma "Per fortuna hashbang non è più in uso diffuso." Come cambieresti il ​​mio set up per non usare l'hashbang?

risposta

6

È inoltre possibile controllare questo trick. Devi configurare la distribuzione di cloudfront e quindi modificare il comportamento 404 nella sezione "Pagine di errore" della tua distribuzione. In questo modo puoi ancora domain.com/foo/bar links

+0

Questo è quello che ho finito per fare, un po 'hacky ma funziona. Grazie per aver postato !!! –

0

L'Hash bang non è consigliato quando si desidera creare un sito web SEO friendly, anche se indicizzato in Google, la pagina mostrerà solo un contenuto piccolo e sottile.

Il modo migliore per fare il tuo sito web è utilizzando la tendenza e le tecniche più recenti che è "Progressive web enhancement" cercare su Google e troverai molti articoli su di esso.

Principalmente si dovrebbe fare un link separato per ogni pagina, e quando l'utente fa clic su qualsiasi pagina verrà reindirizzato a questa pagina utilizzando qualsiasi effetto desiderato o anche se sito web a pagina singola.

In questo caso, Google avrà un collegamento univoco per ogni pagina e l'utente avrà l'effetto di fantasia e l'ottima UX.

EX:

<a href="http://www.example.com/contact-us" onclick="fancyEffects();">Contact Us</a> 
3

So che è stato un po 'di mesi, ma per tutti quelli che hanno incontrato lo stesso problema, puoi semplicemente specificare "index.html" come documento di errore in S3. È possibile trovare la proprietà del documento di errore in bucket Properties => Hosting sito Web statico => Abilita l'hosting del sito Web.

Tieni presente che, adottando questo approccio, sarai responsabile della gestione degli errori HTTP come 404 nella tua applicazione insieme ad altri errori http.