dBlog CMS Open Source: italiano - english - español - français - deutsch | Laboratorio: template - plug in - translation - extra | Forum | Licenza | Newsletter | Contatti

Clicca sulle stelline per votare
Attualmente voti: 1 media: 10  

Google Sitemaps per dBlog

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:

  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 dove già si discute della cosa.



Questo articolo ti è piaciuto?



Se desideri stamparlo clicca qui oppure potresti essere interessato alla sottoscrizione del feed RSS per ricevere gratuitamente nel tuo aggregatore tutti gli aggiornamenti di questo blog.

< Vai al post precedente
Vai al post successivo >

 

Commenti

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


Di dario il 05/10/2006 @ 11:25:44

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


Di Marlenek il 06/10/2006 @ 00:12:01



Nuovo commento

Non inserire testo nel campo sotto (altrimenti non riuscirai a commentare)

Testo (max 1000 caratteri)

Nome

e-Mail / Link ("nofollow", "no-rel", non pubblicato)



Disclaimer
L'indirizzo IP del mittente viene registrato, in ogni caso si raccomanda la buona educazione.

Marlenek

Daniele Vietri - Milano, IT

Web Project Manager di sistemi e-Commerce e community, autore di dBlog CMS... [continua]


x Feed RSS dei post
Iscritti su FeedBurner

Daniele Vietri

LinkedIN

Su argomenti simili...

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)

Corso siti web, in aula a Milano (o altrove, su richiesta)

Dall'autore di questo blog un corso completo per sviluppare semplici siti web e diventare webmaster:
Corso di HTML

Scopri: Info | Date e città | Argomenti | Destinatari | Blog