Di Daniele Vietri @ 24/04/2006 - in Web Development - Commenti (2)
Questo post è stato letto 6020 volte in 1592 giorni.
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:
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 dove già si discute della cosa.
Questo articolo ti è piaciuto?
Di
Marlenek
il 06/10/2006 @ 00:12:01
Web Project Manager di sistemi e-Commerce e community, autore di dBlog CMS... [continua]
Mr Wolf risolve problemi, la prima pagina di Google no
18/03/2010 - in Web Marketing - Commenti (0)
Google acquisisce Fineco
13/02/2010 - in Web Marketing - Commenti (4)
Google Buzz: l'attacco dei cloni
11/02/2010 - in Internet - Commenti (2)
Voglio essere in prima pagina su Google!
16/10/2009 - in Web Marketing - Commenti (7)
Google Suggest: la F di...
15/09/2009 - in Internet - Commenti (0)
Scopri:
Info |
Date e città |
Argomenti |
Destinatari |
Blog
Di dario il 05/10/2006 @ 11:25:44