博客系统自动生成Sitemap网址地图为了让网站内容更高的收录,建立网址地图告诉搜索引擎哪些网页想要被收录。
我的博客系统是自己写的,我需要不定时更新sitemap增加新内容,所以用代码生成sitemap是必要的,这样不用每次编辑。
sitemap就是一个xml文本,放在网站空间的根目录下,引擎蜘蛛会自动读取。
sitemap写法格式如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
< urlset xmlns=http://www.google.com/schemas/sitemap/0.9>
<url>
<loc>http://www.neesoo.cn/archives/71.html</loc>
<lastmod>2009-03-07</lastmod>
<changefreq>yearly</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>http://www.neesoo.cn/archives/71.html</loc>
<lastmod>2009-03-06</lastmod>
<changefreq>yearly</changefreq>
<priority>0.2</priority>
</url>
</urlset>
loc网址(必填项),lastmod最后一次编辑的时间,changefreq跟新频率,priority权重。
<loc>www.example1.com</loc>该页的网址。该值必须少于256个字节(必填项)。格式为<loc>您的url地址</loc>
<lastmod>2010-01-01</lastmod>该文件上次修改的日期(选填项)。格式为<lastmod>年-月-日</lastmod>
<changefreq> always </ changefreq >页面可能发生更改的频率(选填项) 。有效值为:always、hourly、daily、weekly、monthly、yearly、never
<priority>1.0</priority >此网页的优先级。有效值范围从 0.0 到 1.0 (选填项) 。0.0优先级最低、1.0最高。
我的方法:建立一个仅供我自己使用的webservice,从数据库中提取我所有的博客列表,代码生成我网址地图保存文件到我的根目录。不定时调用webservice自动生成网址地图。
部分代码如下:
[WebMethod]
public string GenerateSitemap(string PassWord)
{
if (PassWord != "XXXXXXXXX")
{
return "非正规途径调用!!!!";
}
else
{
DataSet MyBlogs = new DataSet();
string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\storage\\users.accdb";
using (OleDbConnection con = new OleDbConnection(conStr))
{
string cmdStr = "select [blogUrl] from blog";
using (var cmd = new OleDbCommand(cmdStr, con))
{
con.Open();
OleDbDataAdapter s = new OleDbDataAdapter(cmdStr, conStr);
s.Fill(MyBlogs);
con.Close();
}
}
urlset urlsets = new urlset();
urlsets.urls = new List<Url>();
for (int x = 0; x < MyBlogs.Tables[0].Rows.Count; x++)
{
Url blog = new Url()
{
Loc = MyBlogs.Tables[0].Rows[x][0].ToString(),
Priority = 1,
};
urlsets.urls.Add(blog);
};
string strUploadPath = HttpContext.Current.Server.MapPath("") + "\\sitemap.xml";
using (FileStream objfilestream = new FileStream(strUploadPath, FileMode.Create, FileAccess.ReadWrite))
{
XmlSerializer xmlSearializer = new XmlSerializer(typeof(urlset));
xmlSearializer.Serialize(objfilestream, urlsets);
}
return "ok";
}
}
其中Xml类的序列化定义。
public class urlset
{
//[XmlAttribute("urlset")]
[XmlElement(ElementName = "url")]
public List<Url> urls { get; set; }
}
public class Url
{
//[XmlAttribute("loc")]
[XmlElement(ElementName = "loc")]
public string Loc { get; set; }
//[XmlAttribute("lastmod")]
[XmlElement(ElementName = "lastmod")]
public string Lastmod { get; set; }
//[XmlAttribute("changefreq")]
[XmlElement(ElementName = "changefreq")]
public string Changefreq { get; set; }
//[XmlAttribute("priority")]
[XmlElement(ElementName = "priority")]
public int Priority { get; set; }
}
(the end)