11 messaggi dal 20 agosto 2008
Salve a tutti,
Ho due pagine ovvero alloggi.aspx e dettaglioAlloggio.aspx.
Per passare da una pagina all altra ho fatto un passaggio di parametri in get del tipo: dettaglioAlloggio.aspx?alloggioId=5 e fin qui nessun problema.
Il problema è sorto nel momento in cui ho incominciato ad usare i firendly url del tipo:
/alloggio/casavacanze dove in pratica casavacanze è il titolo della casa che io ho cliccato.
La domanda è la seguente: visto che in get nn c'è più l'id passato come faccio a prendere l'alloggio cliccato?

Se magari avete bisogno del codice scritto ve lo posto.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, ci sono un paio di metodi per risorverlo.
Il primo è passare l'ID comunque, magari come segmento dell'url, anziché in querystring.
/alloggio/5/casavacanze

cioè dovrai aggiornare la tua route in modo che preveda anche un parametro {id} tra la parola "alloggio" e il nome.
Aspitalia, ad esempio, usa questo sistema, lo puoi vedere nell'url di un articolo.
http://www.aspitalia.com/focuson/1296/Speciale-Windows-Azure-Web-Site-Cloud-Incontra-Semplicita.aspx

Questa soluzione, però, non è gradita ad alcuni SEO (per lo meno da quelli con cui lavoro io) perché il '5', a loro dire, è solo un artefatto tecnico che non ha posto nella gerarchia dei contenuti.

Credo che in fondo abbiano ragione, anche se sono convinto che l'esperienza di navigazione dell'utente non possa esser danneggiata dalla presenza di un numero.
Poi portano come esempio il CMS Wordpress, un cui l'ID effettivamente non compare, e quindi mi mettono all'angolo.

Questo ci porta alla seconda soluzione che è quella di generare dal backend, in fase di inserimento dell'alloggio, una stringa che lo identifichi univocamente, che andrai a memorizzare in un nuovo campo della tabella dotato di vincolo UNIQUE.
Potresti addirittura promuoverla a chiave primaria se questo non sconvolge quanto hai già realizzato.

Nel generare questa stringa dovresti innanzitutto fare l'url enconding del nome dell'alloggio; magari togliendo o sostituendo i caratteri speciali; e troncarlo se è troppo lungo.
Fatto questo devi controllare se la stringa ottenuta è già presente nel db, perché se lo è devi disambiguarla aggiungendo un numero in coda oppure il nome della località in cui si trova l'alloggio.

A proposito di località, hai pensato ad aggiungere un ulteriore livello per le provincie o le regioni? Una cosa tipo:
/alloggi/sardegna/nome-alloggio

Se l'utente dovesse visitare /alloggi/sardegna vedrebbe subito tutti gli alloggi di quella regione.

Tornando in tema: lato server, anziché fare una query che coinvolge l'ID dell'alloggio, dovrai cercare sul nuovo campo univoco che hai creato.

ciao
Modificato da BrightSoul il 26 marzo 2013 00.42 -

Enjoy learning and just keep making
11 messaggi dal 20 agosto 2008
Grazie per la ottima ed esaustiva risposta.
Mi ritrovo con tutto quello che hai detto non a caso la mia idea è quella di fare:
Sito/provincia/territorio/nome_escursione
Il vincolo unique l'ho già previsto l'unica cosa che mi spaventa però è proprio il fatto di levare i cosiddetti caratteri speciali.
Avresti qualcosa da consigliarmi per fare questo:
Nel generare questa stringa dovresti innanzitutto fare l'url enconding del nome dell'alloggio; magari togliendo o sostituendo i caratteri speciali; e troncarlo se è troppo lungo.
Cioè il nome_escursione non deve coincidere al 100% con quello presente nel db per prendere il suo id ed ottenere il dettaglio?
Grazie mille per la risposta!
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
daniele9821 ha scritto:

Avresti qualcosa da consigliarmi per fare questo:

Sì, nel gergo di Wordpress questa stringa la chiamano "post slug" e puoi trovare qualche algoritmo per generarla anche da un sito .NET. Prova a cercare "C# Slugification", vengono fuori post come questo:
http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx
Lì vedi proprio l'esempio di un titolo contenente caratteri speciali che vengono scartati.

Ce n'è anche una versione javascript, nel caso in cui volessi generarlo lato client, in modo da mostrarlo subito all'amministratore del sito. Eventualmente potrebbe modificarlo a suo piacimento, per evitare duplicati o scegliere le parole più significative per evitare il troncamento.
http://milesj.me/snippets/javascript/slugify

daniele9821 ha scritto:
Cioè il nome_escursione non deve coincidere al 100% con quello presente nel db

Sì, deve coincidere. Nella tua tabella devi avere un campo per il titolo e un campo per lo slug.
Quando la tua pagina dettaglioAlloggio.aspx va in esecuzione, estrarrà lo slug dal RouteData e lo userà in una query al database.
SELECT titolo, descrizione FROM alloggi WHERE slug='casa-vacanze'
In questa query l'ID numerico non viene mai usato perché c'è già lo slug ad identificare univocamente l'alloggio.

Un'ultima cosa: dato che lo slug fa parte dell'URL, è importante che dopo il primo inserimento non cambi mai, neanche se modifichi il titolo dell'alloggio. Altrimenti gli utenti, quando ti raggiungono da Google o da qualiasi altro sito, rischierebbero di atterrare su pagine 404.

ciao
Modificato da BrightSoul il 26 marzo 2013 19.35 -

Enjoy learning and just keep making
11 messaggi dal 20 agosto 2008
Sei stato davvero prezioso....mi hai aperto un mondo fino ad adesso sconosciuto.
Domanda, ma sei un esperto SEO in page oppure ho beccato la domanda giusta?
In ogni caso ti ringrazio davvero molto e se vuoi possiamo scambiarci in privato il contatto Skype e/o mail per condividere un po' di conoscenze.

Grazie
Daniele.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prego!
No no, non sono un esperto SEO ma lavoro in un'agenzia di web marketing e per questo sono a contatto con dei colleghi che lo "praticano" (perché per me è una pratica alchemica :)

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.