Archivio per mese: marzo 2006

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).

Nuova grafica

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

Ed ecco finalmente pubblicato il nuovo layout del mio blog personale: non ce la facevo più, eheh! La prima cosa che salta all’occhio è il passaggio a 3 colonne, ma navigando meglio vi accorgerete che si tratta solo della home page. Ho spostato un po’ di contenuti cercando di privilegiare i commenti e l’interazione, visto che siamo ufficialmente nell’era del web 2.0 😀

Il mio blog personale... prima     Il mio blog personale... ora!

La fotografia nell’intestazione ora è fissa, ma cambierà con gli eventi… l’idea iniziale era di farla cambiare ogni ora, simulando lo scorrere del tempo, ma non ho mica trovato 24 fotografie decenti di sole e luna. Qualcuno mi suggerisce una buona fonte?

La ricerca è stata posizionata in alto all’interno di ogni pagina del sito ed ho aggiunto una semplice routine simile al “Forse cercavi…” di Google (sottolineo il simile con fare ironico). La capacità di suggerire alternative valide dovrebbe migliorare col tempo, man mano che vengono effettuate delle ricerca sul blog.

Le categorie degli articoli e delle foto adesso dispongono di un comodo contatore per sapere quanti oggetti aspettarsi dopo il clic di ingresso. Appena sotto troviamo la Tag cloud che mostra i tag associati agli articoli con maggiore frequenza (minimo 2 volte), grazie a questo spazio si può risalire grossomodo agli argomenti principali del blog. Poi una serie di link interni ed ovviamente i Feed.

Sempre in home page vengono mostrati gli ultimi 7 post (articoli) che, grazie alla dimensione diversa dei font, offrono un primo breve percorso cronologico di quello che è già stato archiviato nelle sezioni del blog. Inoltre i contenuti sono sempre posizionati in maniera da poter iniziare a leggere senza far scorrere la pagina ed hanno uno spazio maggiore in larghezza di circa 60-70 pixel. Una intera colonna è stata poi dedicata agli ultimi commenti, con una preview testuale e il link all’articolo o alla fotografia di riferimento, cercando di stimolare la discussione.

Appena sotto ecco un’altra novità: le ultime immagini pubblicate nel fotoblog, che assume quindi maggiore importanza rispetto alla precedente versione del blog. Di seguito il linklog che perde valore rispetto a prima (era posizionato in alto) perché non prevede ancora spazi interattivi, ma viene solo utilizzato come area di segnalazione.

In home page manca ancora una sezione, ma si tratterà di una semplice area di invito all’utilizzo di dBlog CMS Open Source con link al download, manuale, forum, laboratorio, etc. Invece come ultimo modulo prende forma un blogroll degno di questo nome, seguito dalle note di copyright e l’indicazione della piattaforma utilizzata. La dimensione della home page è diminuita di 25-30 Kb ed anche il numero di schermate è stato dimezzato.

Nelle sottopagine lascio a voi scoprire qualche novità, vi segnalo quella più importante ovvero l’integrazione di una struttura orientata ai motori di ricerca tramite una simulazione del “mod rewrite” (scriverò un lungo post su questo argomento domani o dopo): provate a cliccare su un articolo e date un’occhiata all’indirizzo che compare sul vostro browser! Ma non solo: a breve ci sarà il trackback, fin da ora c’à la nuova area “Similitudini” dove vengono caricati automaticamente gli articoli che trattano gli stessi argomenti e… va beh, non voglio rovinarvi altre sorprese 😀

Ho già fatto un giro di testing con Explorer 6 e con Firefox 1.5, per il primo tutto ok, mentre per la volpe ho dei problemi sull’allineamento delle thumbnail del fotoblog, ma vedrò di risolvere nei prossimi giorni. Se qualcuno ha modo di fare un test con Explorer 7 e/o con altri sistemi mi aiuterebbe molto…

Infine non posso dimenticarmi di dire che le immagini dei 2 cucciolotti non sono scattate da me: il boxer fa parte di una foto ritagliata e scontornata presente su Google Image, mentre il carlino proviene dal sito ugoclub.com a cui ho già scritto una mail. Allo stesso modo la cornice delle foto in home page era originariamente una gif di cui purtroppo non ricordo la provenienza 😛 Invece per la strutturazione dei contenuti, la griglia della homa page ed alcune funzionalità ho liberamente preso spunto estetico da 5 blog: Downloadblog, Stopdesign, Jayber, Themaninblue e Sitepoint.

E ora… passo la parola e attendo i vostri pareri.

Tag Cloud in ASP

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

Partendo dal codice in Cold Fusion presente qui sul blog Edit e da quello in PHP qui su blog di Augusto ho scritto velocemente qualche riga per realizzare una Tag Cloud in ASP, come accennavo in un post di qualche giorno fa.

Il codice si basa sulla presenza di una tabella chiamata “Technorati” contenente tutti i Tag utilizzati. Lo script è sicuramente migliorabile (specie nel doppio ciclo), quindi se fate qualche modifica segnalatela nei commenti così da poter aggiornare il tutto ed ottimizzare la routine. Ecco il codice in VBScript:

Dim SQLTagCloud, RSTagCloud, ArrayTag, I, FrequenzaMin, FrequenzaMax, FrequenzaDiff, FrequenzaDistrib, CSSClass, FrequenzaFiltroFrequenzaFiltro = 2SQLTagCloud = ” SELECT COUNT(Tag) AS Frequenza, Tag FROM Technorati GROUP BY Tag “
Set RSTagCloud = Server.CreateObject(“ADODB.Recordset”)
RSTagCloud.Open SQLTagCloud, Conn, 1, 3

If NOT RSTagCloud.EOF Then
ArrayTag = RSTagCloud.GetRows
Else
ReDim ArrayTag(1, -1)
End If

RSTagCloud.Close
Set RSTagCloud = Nothing

If UBound(ArrayTag, 2) > -1 Then
FrequenzaMin = 1
FrequenzaMax = 1

For I = 0 To UBound(ArrayTag, 2)
If ArrayTag(0, I) < FrequenzaMin Then
FrequenzaMin = ArrayTag(0, I)
End If
If ArrayTag(0, I) > FrequenzaMax Then
FrequenzaMax = ArrayTag(0, I)
End If
Next

If FrequenzaMin < FrequenzaFiltro Then
FrequenzaMin = FrequenzaFiltro
End If

FrequenzaDiff = FrequenzaMax – FrequenzaMin
FrequenzaDistrib = FrequenzaDiff / 5

For I = 0 To UBound(ArrayTag, 2)
If ArrayTag(0, I) >= FrequenzaFiltro Then
If ArrayTag(0, I) = FrequenzaMin Then
CSSClass = “tcmpiccolo”
ElseIf ArrayTag(0, I) = FrequenzaMax Then
CSSClass = “tcmgrande”
ElseIf ArrayTag(0, I) > FrequenzaMin + (FrequenzaDistrib * 2) Then
CSSClass = “tcgrande”
ElseIf ArrayTag(0, I) > FrequenzaMin + FrequenzaDistrib Then
CSSClass = “tcmedio”
Else
CSSClass = “tcpiccolo”
End If

Response.Write “<a href=””cerca.asp?cosa=”& Server.URLEncode(ArrayTag(1, I)) &””” title=””Tag: “& Server.HTMLEncode(ArrayTag(1, I)) &” | Frequenza: “& ArrayTag(0, I) &””” class=”””& CSSClass &”””>” & ArrayTag(1, I) & “</a> “
End If
Next
End If

Invece nel foglio di stile andranno aggiunte le seguenti righe:

  a.tcmpiccolo { font-size: xx-small; }
a.tcpiccolo { font-size: small; }
a.tcmedio { font-size: medium; }
a.tcgrande { font-size: large; }
a.tcmgrande { font-size: xx-large; }

Free ASP Hosting (ma anche Free PHP Hosting)

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

Ogni tanto sul forum qualcuno chiede se esistono spazi gratuiti dove caricare i propri script ASP, ASP.NET, PHP, CGI, SSI, Perl, Python, Ruby, etc… bene, la risposta è: sì! Per il testing della versione tedesca di dBlog ho dovuto fare una ricerca su Google e tra i primi risultati ho trovato questo elenco di hosting gratuiti con supporto script. Ne sto provando alcuni e sembrano funzionare regolarmente. Mica male! 🙂

 Torna su