Google Sitemaps per dBlog

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

Qualche tempo fa Google ha rilasciato un sistema, chiamato Google Sitemaps, che permette ai webmaster di indicare allo spider quali sono le pagine che compongono il proprio sito web, in maniera da agevolare e velocizzare l’indicizzazione, fornendo anche dettagli sull’importanza di ogni singola pagina. Google indica questo servizio come un “esperimento”, ma gli dedica spazio e risorse, tanto che nel giro di poche ore il file XML generato viene subito dato in pasto ai crawler.

Un Sitemaps che si rispetti deve essere sempre aggiornato fornendo i link a tutti gli ultimi contenuti del blog, proprio per questo motivo è scomodo doverlo modificare ad ogni aggiornamento. La soluzione è quella di creare uno script che esegua per noi questo compito in automatico.

Ecco quindi come creare un Google Sitemaps in ASP per il vostro dBlog. Prima di tutto è necessario informarsi sul progetto leggendo le pagine ufficiali in italiano, poi occorre:

  1. creare nella root del vostro blog un file chiamato sitemaps.asp ed inserire il codice che segue
  2. creare un account o eseguire l’accesso al servizio dalla pagina ufficiale di Google Sitemaps
  3. per inserire il link del vostro sitemaps e seguire la procedura indicata
  4. attendere e verificare che lo spider Google venga ad analizzare il vostro file per la prima volta

Ecco il codice da inserire nello script ASP sitemaps.asp e da posizionare nella root (cartella principale) del vostro hosting:

<!–#include virtual=”/mdb-database/inc_costanti.asp”–>
<!–#include virtual=”/dblog/inc_db.asp”–>
<!–#include virtual=”/dblog/inc_funzioni.asp”–>
<%
‘dBlog 2.0 CMS Open Source
‘FUNZIONE: questo script si occupa di generare la Google SiteMaps

‘Nell’ordine: <loc>, max 2048 caratteri <lastmod>, formato ISO8601 <changefreq>, validi always, hourly, daily, weekly, monthly, yearly, never <priority>, da 0.1 a 1.0 default 0.5
Function NodoURL(URL, UltimaModifica, FrequenzaModifica, Priorita)
Dim Risultato

Risultato = “”
Risultato = Risultato & ” <url>” & VbCrLf
Risultato = Risultato & ”  <loc>”& URL &”</loc>” & VbCrLf
Risultato = Risultato & ”  <lastmod>”& UltimaModifica &”</lastmod>” & VbCrLf
Risultato = Risultato & ”  <changefreq>”& FrequenzaModifica &”</changefreq>” & VbCrLf
Risultato = Risultato & ”  <priority>”& Priorita &”</priority>” & VbCrLf
Risultato = Risultato & ” </url>” & VbCrLf

NodoURL = Risultato
End Function

Function DataISO(Data)
Dim Risultato, Anno, Mese, Giorno

Risultato = “”

If IsDate(Data) Then
Anno = cStr(Year(Data))
Mese = cStr(Month(Data))
If Len(Mese) = 1 Then
Mese = “0” & Mese
End If
Giorno = cStr(Day(Data))
If Len(Giorno) = 1 Then
Giorno = “0” & Giorno
End If

Risultato = Anno & “-” & Mese & “-” & Giorno
End If

DataISO = Risultato
End Function

Function RecuperaDataDaFile(PercorsoRelativo)
Dim Risultato, FSO, F

Risultato = “”
Set FSO = CreateObject(“Scripting.FileSystemObject”)
If FSO.FileExists(Server.MapPath(PercorsoRelativo)) Then
Set F = FSO.GetFile(Server.MapPath(PercorsoRelativo))
Risultato = DataISO(F.DateLastModified)
End If
Set F = Nothing
Set FSO = Nothing

RecuperaDataDaFile = Risultato
End Function

Dim SQL, RS, DataUltimoContributo, DataUltimoArticolo, DataUltimaFotografia, DataUltimoLinkLog, ArrayGiorniPieni, I, DataGiaPresente

DataUltimoContributo = DataToStr(Date())
DataUltimoArticolo = DataToStr(Date())
DataUltimaFotografia = DataToStr(Date())
DataUltimoLinkLog = DataToStr(Date())

SQL = ” SELECT TOP 1 Data FROM Articoli WHERE NOT Articoli.Bozza AND Articoli.Data <= ‘”& DataToStr(Date()) &”‘ ORDER BY Articoli.Data DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

If NOT RS.EOF Then
DataUltimoArticolo = RS(“Data”)
End If

RS.Close
Set RS = Nothing

SQL = ” SELECT TOP 1 Data FROM Fotografie WHERE NOT Fotografie.Bozza AND Fotografie.Data <= ‘”& DataToStr(Date()) &”‘ ORDER BY Fotografie.Data DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

If NOT RS.EOF Then
DataUltimaFotografia = RS(“Data”)
End If

RS.Close
Set RS = Nothing

SQL = ” SELECT TOP 1 Data FROM LinkLog WHERE LinkLog.Data <= ‘”& DataToStr(Date()) &”‘ ORDER BY LinkLog.Data DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

If NOT RS.EOF Then
DataUltimoLinkLog = RS(“Data”)
End If

RS.Close
Set RS = Nothing

If DataUltimoContributo <= DataUltimoArticolo Then
DataUltimoContributo = DataUltimoArticolo
End If
If DataUltimoContributo <= DataUltimaFotografia Then
DataUltimoContributo = DataUltimaFotografia
End If
If DataUltimoContributo <= DataUltimoLinkLog Then
DataUltimoContributo = DataUltimoLinkLog
End If

DataUltimoArticolo = StrToData(DataUltimoArticolo)
DataUltimoArticolo = DataISO(DataUltimoArticolo)
DataUltimaFotografia = StrToData(DataUltimaFotografia)
DataUltimaFotografia = DataISO(DataUltimaFotografia)
DataUltimoLinkLog = StrToData(DataUltimoLinkLog)
DataUltimoLinkLog = DataISO(DataUltimoLinkLog)
DataUltimoContributo = StrToData(DataUltimoContributo)
DataUltimoContributo = DataISO(DataUltimoContributo)

Response.ContentType = “text/xml”
Response.Write “<?xml version=””1.0″” encoding=””UTF-8″”?>” & VbCrLf
Response.Write “<urlset xmlns=””http://www.google.com/schemas/sitemap/0.84“”>” & VbCrLf

‘\
Response.Write NodoURL(URL_Sito & “/default.asp”, RecuperaDataDaFile(“/default.asp”), “monthly”, “0.9”)

‘\dblog
SQL = ” SELECT Articoli.Sezione FROM Articoli WHERE Articoli.Data <= ‘”& DataToStr(Date()) &”‘ AND Articoli.Bozza = False GROUP BY Articoli.Sezione “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
Response.Write NodoURL(URL_Blog & “storico.asp?s=” & Server.URLEncode(RS(“Sezione”)), DataUltimoArticolo, “daily”, “0.7”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

SQL = ” SELECT ID, Titolo, Data FROM Articoli WHERE Articoli.Data <= ‘”& DataToStr(Date()) &”‘ AND NOT Articoli.Bozza ORDER BY Articoli.Data DESC, Articoli.Ora DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
Response.Write NodoURL(URL_Blog & “articolo.asp?articolo=” & RS(“ID”), DataISO(StrToData(RS(“Data”))), “hourly”, “1.0”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

SQL = ” SELECT Nick  FROM Autori ORDER BY Autori.Nick “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
Response.Write NodoURL(URL_Blog & “autori.asp?chi=” & Server.URLEncode(RS(“Nick”)), DataUltimoContributo, “monthly”, “0.6”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

Response.Write NodoURL(URL_Blog & “classifica.asp”, DataUltimoContributo, “hourly”, “0.5”)
Response.Write NodoURL(URL_Blog & “default.asp”, DataUltimoContributo, “always”, “1.0”)
Response.Write NodoURL(URL_Blog & “feedatom.asp”, DataUltimoContributo, “hourly”, “1.0”)
Response.Write NodoURL(URL_Blog & “feedrss.asp”, DataUltimoContributo, “hourly”, “1.0”)

SQL = ” SELECT Sezione FROM Fotografie WHERE Fotografie.Data <= ‘”& DataToStr(Date()) &”‘ GROUP BY Sezione ORDER BY Sezione ASC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
Response.Write NodoURL(URL_Blog & “foto.asp?s=” & Server.URLEncode(RS(“Sezione”)), DataUltimaFotografia, “daily”, “0.7”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

SQL = ” SELECT Fotografie.ID, Fotografie.Data FROM Fotografie WHERE Fotografie.Data <= ‘”& DataToStr(Date()) &”‘ AND NOT Fotografie.Bozza ORDER BY Fotografie.Data DESC, Fotografie.Ora DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
Response.Write NodoURL(URL_Blog & “fotografia.asp?id=” & RS(“ID”), DataISO(StrToData(RS(“Data”))), “hourly”, “1.0”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

Response.Write NodoURL(URL_Blog & “linklog.asp”, DataUltimoContributo, “hourly”, “0.7”)

ReDim ArrayGiorniPieni(0, -1)

SQL = ” SELECT Data FROM Articoli WHERE NOT Articoli.Bozza AND Articoli.Data <= ‘”& DataToStr(Date()) &”‘ ORDER BY Articoli.Data DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
ReDim Preserve ArrayGiorniPieni(0, UBound(ArrayGiorniPieni, 2) + 1)
ArrayGiorniPieni(0, UBound(ArrayGiorniPieni, 2)) = RS(“Data”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

SQL = ” SELECT Data FROM Fotografie WHERE NOT Fotografie.Bozza AND Fotografie.Data <= ‘”& DataToStr(Date()) &”‘ ORDER BY Fotografie.Data DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
DataGiaPresente = False
For I = 0 To UBound(ArrayGiorniPieni, 2)
If ArrayGiorniPieni(0, I) = RS(“Data”) Then
DataGiaPresente = True
Exit For
End If
Next

If NOT DataGiaPresente Then
ReDim Preserve ArrayGiorniPieni(0, UBound(ArrayGiorniPieni, 2) + 1)
ArrayGiorniPieni(0, UBound(ArrayGiorniPieni, 2)) = RS(“Data”)
End If

RS.MoveNext
Loop

RS.Close
Set RS = Nothing

For I = 0 To UBound(ArrayGiorniPieni, 2)
Response.Write NodoURL(URL_Blog & “pubblicazioni.asp?d=” & ArrayGiorniPieni(0, I), DataISO(StrToData(ArrayGiorniPieni(0, I))), “daily”, “0.7”)
Next

SQL = ” SELECT ID FROM Sondaggio ORDER BY Sondaggio.ID DESC “
Set RS = Server.CreateObject(“ADODB.Recordset”)
RS.Open SQL, Conn, 1, 3

Do While NOT RS.EOF
Response.Write NodoURL(URL_Blog & “risultati.asp?id=” & RS(“ID”), DataUltimoContributo, “hourly”, “0.6”)
RS.MoveNext
Loop

RS.Close
Set RS = Nothing

Response.Write “</urlset>”

Conn.Close
Set Conn = Nothing
%>

Si tratta di un codice esemplificativo ma funzionante, per qualsiasi miglioramento o segnalazione utilizzate il Forum tecnico (discontinued) dove già si discute della cosa.

2 commenti per Google Sitemaps per dBlog
  1. dario Rispondi

    No ma lo spider deve seguire i link della pagina root(index) o no?

  2. Marlenek Rispondi

    Dario: non ho capito cosa intendi. Questo file serve a Google ma ufficialmente non viene utilizzato ai fini dell’indicizzazione. Certo, nel dubbio… meglio averlo.

Lascia un commento

Il tuo indirizzo mail non verrà pubblicato. Inserisci il tuo nome, la tua mail e il commento.