SpringBoot为网站生成sitemap

生么是Sitemap

Sitemap(站点地图)是一种文件,站长可通过该文件列出网站上的网页,将网站内容的组织结构告知搜索引擎。

让网站被搜索引擎收录时需要用到sitemap

Sitemap格式

Sitemap文件包括标准xml文件和索引型xml文件

<?xml version="1.0" encoding="utf-8"?>
  <!-- XML文件需以utf-8编码-->
  <urlset>
    <!--必填-->
    <url>
        <!--必填,定义某一个链接的入口,每一条数据必须要用<url>和</url>来标示 -->
        <loc>http://m.domain.com/abc.xhtml</loc>
        <!--必填,URL长度限制在256字节内-->
        <lastmod>2014-05-01</lastmod>
        <!--更新时间标签,非必填,用来表示最后更新时间-->
        <changefreq>daily</changefreq>
        <!--更新频率标签,非必填,用来告知引擎页面的更新频率 -->
        <priority>0.5</priority>
        <!--优先级标签,优先级值0.0-1.0,用来告知引擎该条url的优先级-->
     </url>
     <url>
        <loc>http://m.domain.com/123.xhtml</loc>
        <lastmod>2014-05-01</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
  </urlset>

SpringBoot 实现

其实不难就是读取项目url封装成xml返回,baidu一些都是引用第三方类库

直接上代码

实体类 SiteMap.java

public class SiteMap{

    private SimpleDateFormat sdf=new SimpleDateFormat("yyyy_MM_dd");
    /**
     * url https://www.xxx.com
     */
    private String loc;
    /**
     * 最后更新时间 yyyy-MM-dd
     */
    private Date lastmod;
    /**
     * 更新速度 always hourly daily weekly monthly yearly never
     */
    private String changefreq;
    /**
     * 权重 1.0 0.9 0.8
     */
    private String priority;


    @Override
    /** 重写 toString 适应xml格式 */
    public String toString() {
        StringBuffer sb= new StringBuffer();
        sb.append("<url>");
        sb.append("<loc>" +loc+ "</loc>");
        sb.append("<lastmod>" + sdf.format(lastmod) + "</lastmod>");
        sb.append("<changefreq>" +changefreq+ "</changefreq>");
        sb.append("<priority>" +priority+ "</priority>");
        sb.append("</url>");
        return sb.toString();
    }

    public SiteMap() {
    }

    public SiteMap(String loc) {
        this.loc=loc;
        this.lastmod= new Date();
        this.changefreq= "always";
        this.priority= "1.0";
    }

    public SiteMap(String loc, Date lastmod, String changefreq, String priority) {
        this.loc=loc;
        this.lastmod=lastmod;
        this.changefreq=changefreq;
        this.priority=priority;
    }
}

controller 层 SitemapController.java


@Controller
public class SiteMapController extends BaseController {

    @Autowired
    private PostRepository postRepository;

    public static String BEGIN_DOC = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
            "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";

    static String END_DOC = "</urlset>";
    static String CHANGEFREQ_DAILY = "daily";
    public static String CHANGEFREQ_ALWAYS = "always";


    @GetMapping(value = "/sitemap.xml", produces = {"application/xml;charset=UTF-8"})
    @ResponseBody
    public void getSiteMap(HttpServletResponse response) throws IOException {
        StringBuffer sb = new StringBuffer();
        sb.append(BEGIN_DOC);//拼接开始部分
        sb.append(new SiteMap("https://wwww.liflag.cn"));//拼接网站首页地址
        //下面是根据实际情况写,目的是生成整站的Url
        List<String> param = new ArrayList<>();
        List<Post> list=  postRepository.findAll();
        for (Post a : list) {
            sb.append(new SiteMap("https://www.liflag.cn/post/" + a.getId(), a.getCreated(), CHANGEFREQ_DAILY, "0.9"));
        }
        sb.append(END_DOC);//拼接结尾
        response.setContentType(MediaType.APPLICATION_XML_VALUE);
        Writer writer = response.getWriter();
        writer.append(sb.toString());
    }
}

至此算是完成了

123.png


已有 0 条评论

    我有话说: