sitemap 文件

2021-02-04 09:59:03

Sitemap(即站点地图)就是您网站上各网页的列表。创建并提交Sitemap有助于Spider发现并了解网站上的所有网页。还可以使用Sitemap提供有关网站的其他信息,如上次更新日期、Sitemap文件的更新频率等,供Spider参考。

一般来说搜索引擎对已提交的数据,不保证一定会抓取及索引所有网址。但是,会使用Sitemap中的数据来了解网站的结构等信息,这样可以帮助改进抓取策略,并在日后能更好地对网站进行抓取。

此外,Sitemap 与搜索排名一般没有关系。

sitemap文件一般有体积和数量上的限制,就百度来说不应超过5万条,体积不能超过10M,当然这不是永恒不变的,可以查询各个搜索引擎的规则。

sitemap可以通过离线的方式一次性生成为文件,供访问,另外对于数量不大的网站来说,动态的生成会更精确,下面罗列一下动态生成的代码,主要使用 spring boot,但原理几乎类似。

// 使用 hutool 的 xml 工具生成 xml 文档,之后使用 java xml 接口拼装文件,最后再由 hutool xml 工具类生成文本写入数据。
@GetMapping(value = "sitemap.xml")
public void sitemap(HttpServletResponse response) throws IOException {

    response.setCharacterEncoding("UTF-8");
    response.setContentType(MediaType.APPLICATION_XML_VALUE);
    Writer writer = response.getWriter();
    
    Document document = XmlUtil.createXml();
    //不显示standalone="no"
    document.setXmlStandalone(true);
    
    Element urlset = document.createElementNS("http://www.sitemaps.org/schemas/sitemap/0.9","urlset");
    //增加移动端
    urlset.setAttribute("xmlns:mobile","http://www.baidu.com/schemas/sitemap-mobile/1/");
    
    // appUrl 为网站的域名
    String siteUrl = "https://www." + appUrl;
    
    //增加了首页,几个输入参数根据实际页面信息来填写
    appendUrlElement(document,urlset,loc, lastmod,changefreq,priority);
    
    //继续增加子页
     appendUrlElement(document,urlset,siteUrl+"/" + url, date,"daily","1");


    //写入文档
    document.appendChild(urlset);

    //写入客户端
    writer.append(XmlUtil.toStr(document));
        
}

为了方便直接实现在了 controller 层,再增加一个 url 写入函数

private Element appendUrlElement(Document document, Element urlSet, String loc, String lastmod, String changefreq, String priority) {
    Element url = document.createElement("url");

    Element locElement = document.createElement("loc");
    locElement.setTextContent(loc);
    url.appendChild(locElement);

    Element mobileElement = document.createElement("mobile:mobile");
    mobileElement.setAttribute("type","pc,mobile");
    url.appendChild(mobileElement);

    Element lastmodElement = document.createElement("lastmod");
    lastmodElement.setTextContent(lastmod);
    url.appendChild(lastmodElement);

    Element changefreqElement = document.createElement("changefreq");
    changefreqElement.setTextContent(changefreq);
    url.appendChild(changefreqElement);

    Element priorityElement = document.createElement("priority");
    priorityElement.setTextContent(priority);
    url.appendChild(priorityElement);

    urlSet.appendChild(url);

    return url;
}

组合一下可以最小化的解决 sitemap 的功能,当然有一些开源工具比较方便,但是这么一个小功能引入开源项目似乎也没有必要。

具体的规则还要参考不同的搜索引擎文档。

Copyright tg-blog 京ICP备15066502号-2