seo

SEO: un Mod Rewrite in ASP

0.00 avg. rating (0% score) - 0 votes

Sappiamo tutti che i principali motori di ricerca non gradiscono indicizzare le pagine che contengono dei parametri nell’indirizzo (url), in particolare pagine dinamiche con parametri numerici, come gli ID.

Per risolvere questo problema gli sviluppatori hanno adottato diverse tecniche tra cui quella di modificare dinamicamente l’indirizzo di una pagina web in maniera da farla sembrare “statica” e senza parametri. Questa soluzione si chiama “rewrite” ed indica l’utilizzo di un software, installato sul Web Server, in grado di modificare l’url di una pagina web con lo scopo (prevalente) di migliorare l’indicizzazione sui motori di ricerca.

Grazie all’utilizzo di questo metodo possiamo partire da un indirizzo come

http://www.dblog.it/dblog/articolo.asp?articolo=510

per arrivare ad ottenere un indirizzo come

http://www.dblog.it/dblog/viva-il-peru.asp

sicuramente più apprezzato dagli spider perché non ci sono parametri numerici ed inoltre il nome del file contiene alcune parole importanti per identificare il contenuto della pagina stessa.

Questa tecnica viene sfruttata principalmente sul Web Server Apache perché dispone di un rewrite engine chiamato “mod_rewrite“. Sui Web Server IIS invece occorre installare un filtro ISAPI come ad esempio il motore “ISAPI_rewrite” o “URL Replacer“. Ma nel caso in cui il provider non abbia la minima intenzione di installare questi software su Internet Information Server? Nessun problema: rimbocchiamoci le maniche e proviamo a confezionare la nostra soluzione 🙂

Per sviluppare un semplice motore di URL Rewriting in ASP con VBSCript dobbiamo partire da una considerazione di fondo: non potendo gestire la traduzione dinamica degli indirizzi web né la loro interpretazione (compiti demandati ad una libreria del Web Server IIS a cui, tramite ASP, non abbiamo accesso) un possibile escamotage consiste nella creazione di pagine fittizie collegate al contenuto reale.

L’idea è quella di sfruttare i contenuti dinamici memorizzati nel database, ma far credere agli spider che non sia così; allo stesso tempo dobbiamo però mantenere la comodità di una struttura gestibile da Pannello di controllo remoto. Per offrire questa garanzia non possiamo salvare il testo all’interno delle pagine fittizie, bisogna trovare un modo per collegarle al DataBase. Una soluzione è quella di salvare l’ID dell’articolo come variabile direttamente nella pagina fittizia e poi sfruttare una query per recuperare i dati e mostrarli nella pagina. Idee confuse? 😀 Passiamo a qualcosa di più pratico per semplificare.

Per una struttura di articoli servono:
– un database con la tabella articoli
– nella tabella articoli un campo ID univoco/contatore, un campo titolo e un campo testo
– una cartella con permessi di scrittura (es. \public) dove salvare le pagine fittizie

Supponendo di sfruttare un database già disponibile e di aver inserito la connessione nel file chiamato inc_db.asp, possiamo passare alla creazione del nostro primo script, il più importante, da salvare nella root insieme ad inc_db.asp:

inc_pagina.asp

<!–#include virtual=”/inc_db.asp”–><%

If VarID <= 0 Then

VarID = 0

End If SQL = ” SELECT Titolo, Testo FROM Tabella WHERE Tabella.ID = “& VarID &” “

Set RS = Server.CreateObject(“ADODB.Recordset”)

RS.Open SQL, Conn, 1, 3

If NOT RS.EOF Then

RSTitolo = RS(“Titolo”)

RSTesto = RS(“Testo”)

Else

RSTitolo = “”

RSTesto = “”

End If

RS.Close

Set RS = Nothing

Conn.Close

Set Conn = Nothing

%>

<html>

<head>

<title><%=RSTitolo%></title>

</head>

<body>

<strong><%=RSTitolo%></strong>

<br /><%=RSTesto%>

</body>

</html>

Lo script inc_pagina.asp verrà automaticamente incluso nelle pagine fittizie e lavorerà in modo da sfruttare la variabile VarID, valorizzata in maniera statica dentro ognuna di queste pagine. In sostanza non fa nient’altro che leggere la VarID ed utilizzarla per recuperare Titolo/Testo dalla tabella Articoli, per poi mostrarli nella pagina come se si trattasse di un semplice HTML statico.

Nella cartella \public avremo ovviamente salvato tutte le pagine fittizie i cui nomi saranno composti secondo la sintassi IDNumerico-titolo-dell-articolo.asp, ad esempio:

510-viva-il-peru.asp

<%VarID = 510

%>

<!–#include virtual=”/inc_pagina.asp”–>

Mancano infine i due script nel Pannello di controllo per la creazione di un nuovo articolo e la modifica di uno già esistente. Nel primo caso è molto semplice: si procederà con il classico inserimento nel DataBase ed aggiungeremo la successiva creazione della pagina fittizia.

aggiungi.asp

 ‘…’In precedenza abbiamo inserito il record nel DataBase Set FSO = CreateObject(“Scripting.FileSystemObject”)

Set Documento = FSO.OpenTextFile(Server.MapPath(“/public/”) & “\” & ConvertiTitoloInNomeScript(FTitolo, IDArticolo), 2, True)

ContenutoFile = “”

ContenutoFile = ContenutoFile & “<” & “%” & vbCrLf

ContenutoFile = ContenutoFile & “VarID = “& IDArticolo &”” & vbCrLf

ContenutoFile = ContenutoFile & “%” & “>” & vbCrLf

ContenutoFile = ContenutoFile & “<!–#include virtual=””/inc_pagina.asp””–>”

Documento.Write ContenutoFile

Set FSO = Nothing

In sostanza si crea un normale file di testo con estensione .asp nella cartella \public e si inserisce dentro una stringa di testo che andrà a comporre il codice ASP, come se l’avessimo scritto a mano. La funzione ConvertiTitoloInNomeScript si occupa invece di creare il nome per il file partendo dal Titolo dell’articolo e dall’ID, per recuperarlo in modo univoco quando necessario. Ecco un primo esempio, assolutamente da ampliare, per questa funzione:

Function NoHTML(Stringa)Set RegEx = New RegExp

RegEx.Pattern = “<[^>]*>”

RegEx.Global = True

RegEx.IgnoreCase = True

NoHTML = RegEx.Replace(Stringa, “”)

End Function

Function ConvertiTitoloInNomeScript(Titolo, IDArticolo)

Risultato = Titolo

Risultato = NoHTML(Risultato)

Risultato = LCase(Risultato)

Risultato = Replace(Risultato, ” “, “-“)

Risultato = Replace(Risultato, “\”, “-“)

Risultato = Replace(Risultato, “/”, “-“)

Risultato = Replace(Risultato, “:”, “-“)

Risultato = Replace(Risultato, “*”, “-“)

Risultato = Replace(Risultato, “?”, “-“)

Risultato = Replace(Risultato, “<“, “-“)

Risultato = Replace(Risultato, “>”, “-“)

Risultato = Replace(Risultato, “|”, “-“)

Risultato = Replace(Risultato, “”””, “”)

Risultato = Replace(Risultato, “‘”, “-“)

‘…ulteriori controlli a piacere, il migliore include solo a..z e 0..9

Risultato = IDArticolo & “-” & Risultato & “.asp”

ConvertiTitoloInNomeScript = Risultato

End Function

Infine la pagina di modifica di un articolo già presente nel DataBase conterrà del codice aggiuntivo solo nel caso in cui venga modificato il Titolo. Nello specifico dovrà eseguire una query per caricare i dati necessari (quindi ID e Titolo dell’articolo) ad identificare in modo univoco la pagina fittizia collegata, procedere alla cancellazione della vecchia pagina e quindi alla creazione di quella nuova, così:

modifica.asp

 ‘…’In precedenza abbiamo controllato che il titolo sia stato modificato e quindi effettuato la query di Update Set FSO = CreateObject(“Scripting.FileSystemObject”)

If FSO.FileExists(Server.MapPath(“/public/”) & “\” & ConvertiTitoloInNomeScript(FTitoloVecchio, QSID)) Then

Set Documento = FSO.GetFile(Server.MapPath(“/public/”) & “\” & ConvertiTitoloInNomeScript(FTitoloVecchio, QSID))

Documento.Delete

Set Documento = Nothing

End If

Set Documento = FSO.OpenTextFile(Server.MapPath(“/public/”) & “\” & ConvertiTitoloInNomeScript(FTitolo, QSID), 2, True)

ContenutoFile = “”

ContenutoFile = ContenutoFile & “<” & “%” & vbCrLf

ContenutoFile = ContenutoFile & “VarID = “& QSID &”” & vbCrLf

ContenutoFile = ContenutoFile & “%” & “>” & vbCrLf

ContenutoFile = ContenutoFile & “<!–#include virtual=””/inc_pagina.asp””–>”

Documento.Write ContenutoFile

Set Documento = Nothing

Set FSO = Nothing

Nella nuova veste del mio blog personale ho utilizzato proprio questa tecnica, modellandola sulle mie necessità e per adesso non ho riscontrato nessun tipo di problema.
Mi piacerebbe sentire cosa ne pensate, a voi la parola.

Qui una versione scaricabile del codice Mod Rewrite ASP.
Nel sito di Wikipedia maggiori dettagli sul Mod Rewrite (in inglese).

Google riconosce il singolare/plurale

0.00 avg. rating (0% score) - 0 votes

Stavo cercando su Google una funzione in ASP che mi permettesse di effettuare il confronto completo di due testi mostrandomi le differenze, sulla falsa riga di come fa UltraEdit 32. E mi sono accorto per caso che tra i risultati comparivano pagine con le parole singolari o plurali indipendentemente da quello che avevo digitato (forse solo quando non vengono trovati altri risultati). Date un occhio qui e qui, facendo attenzione alle chiavi utilizzate per la ricerca… non si finisce mai di imparare! 🙂

E a proposito di “imparare”: qualcuno mi suggerisce un metodo per fare il confronto come si deve? Non sono mica riuscito a trovare nulla di buono…

Su Google

0.00 avg. rating (0% score) - 0 votes

Un paio di pensieri veloci su Google:

    • pare che, utilizzando una nomenclatura simile ad “id” come parametro in querystring, lo spider tenda a non indicizzare la pagina…
  • piccolo brivido sulle prossime modifiche alle logiche di indicizzazione in risposta ai sempre più frequenti “Google bombing” (Armani, Berlusconi, Bush, etc)
1 2 3 Torna su