生么是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());
}
}
至此算是完成了
注意:本文归作者所有,未经作者允许,不得转载