2012-05-29 12 views
15

Utilizziamo il backbone pesantemente per rendere le nostre pagine. Tutti i dati vengono passati come json dal server e l'html viene creato sul client con backbone e baffi. Questo pone un grosso problema per il SEO. Un modo che stavo progettando di aggirare era quello di rilevare se la richiesta proviene da un bot e utilizzare qualcosa come HtmlUnit per rendere la pagina sul server e sputarla fuori. Mi piacerebbe qualche idea alternativa. Inoltre vorrei sapere se c'è un difetto in ciò che sto pensando di fare.SEO per una pagina pesante di backbone js

risposta

4

Non mi piace necessariamente che l'unica opzione che hai per le risposte è di rifare tutto per soddisfare una vasta pratica migliore. Ci sono buone ragioni per considerare di fare le cose usando un approccio Javascript non ostruente, ma forse c'è un buon motivo per farlo come un sito richiesto da JS. Facciamo finta che ci sia.

Se si sta eseguendo un'applicazione Backbone.js con modelli di client inseriti dinamicamente, il modo migliore che potrei pensare di fare è nel seguente link. Fondamentalmente, equivale a dire a un browser headless di eseguire una serie di comandi di navigazione per visualizzare tutti i tuoi utenti/prodotti/pagine e salvare un file html statico ad ogni passaggio per ragioni SEO.

What's the least redundant way to make a site with JavaScript-generated HTML crawlable?

+2

Penso che oltre alle complicazioni SEO (a chi importa di persone senza JS) c'è qualcosa di molto interessante nei servizi RESTful in cui il linguaggio lato server non è responsabile per sputare un carico di spaghetti HTML, o anche se questo è MVCed che lega ancora i dati a una vista fissa di html. –

3

In un progetto su cui sto lavorando in questo momento sto cercando di coprire tutte le basi .. Backbone guidato cliente, uris pushState, pagine memorizzabili come segnalibro, e html fallback, se possibile. L'approccio che ho preso è quello di utilizzare Moustache per i modelli, suddividerli in piccoli componenti per le mie viste backbone e renderli disponibili in un formato raw al client. Quando viene richiesta una pagina, i template possono essere elaborati sul server per produrre una pagina intera e il backbone si collega agli elementi che vuole controllare.

Non è una configurazione semplice, ma finora non ho colpito nessun roadblock e non ho duplicato alcun modello. Ho dovuto creare un modello di page wrapper per ogni url disponibile poiché Mustache non esegue "wrapper", ma penso che dovrei essere in grado di eliminarli con qualche codifica aggiuntiva sul server.

Il piano è quello di essere in grado di avere alcuni componenti come JS puri dove richiesto dall'interfaccia e alcuni reso dal server e migliorato con js dove desiderato ..

+0

Stai condividendo modelli o codice di elaborazione modello? L'idea è stata interessante per me per un po '. Se si utilizza node.js, sembra che sia i modelli che la logica possano essere condivisi. Se si utilizza RoR, sembra che i modelli possano essere condivisi, perché la sintassi ERB è principalmente compatibile con il template JS – SimplGy

+0

Stiamo condividendo modelli tra server e client. Eseguendo Python sul server usiamo Pystache per elaborare i modelli. Utilizziamo i partial per elementi come gli elementi in un elenco e rendono il modello parziale disponibile per il codice client in modo che possa aggiungere elementi all'elenco quando necessario. Penso che la logica richiesta di solito sarà diversa a seconda che ci si trovi nel client o sul server, ma condividiamo la logica lato server tra i gestori rpc ei gestori di pagine, avendo loro metodi di chiamata molto leggeri e chiari sul controller comune/oggetti del modello. – lecstor

0

C'è pro ei contro di utilizzare il Google AJAX crawling schema - l'ho usato per un sito di social networking (http://beta.playup.com) con risultati alterni ...

ho scritto un gioiello per gestire questa situazione in modo trasparente come cremagliera middleware per gli utenti rubino (gem install google_ajax_crawler) (https://github.com/benkitzelman/google-ajax-crawler)

Leggi su di esso a http://thecodeabode.blogspot.com.au/2013/03/backbonejs-and-seo-google-ajax-crawling.html

Il riepilogo è che, anche se sono riuscito a pubblicare istantanee dom rese a un motore di ricerca richiedente, e ho potuto vedere utilizzando gli strumenti per webmaster che Google stava analizzando come 11.000 pagine del sito, ho scoperto che Google era più incline a classificare il apps vari stati (urls) come versioni della stessa pagina e non come indici separati. Prova a effettuare una ricerca per beta.playup.com - viene elencato solo un indice anche se il contenuto sottoposto a rendering cambia radicalmente tra gli URL) ....

0

Se usate node.js utilizzano rendr

Render tue applicazioni Backbone.js sul client e il server, utilizzando Node.js.