robots.txt
robots.txt文件是搜索引擎访问网站第一个要查看的文件。通过robots.txt文件搜索引擎可以确定哪些链接是搜索引擎可以访问的。哪些链接是不希望搜索引擎访问的。甚至可以告知允许哪些搜索引擎访问网站。相当于网站与搜索引擎之间的协议。在搜索引擎找到robots.txt文件后会以robots.txt来确定访问的范围。如果没有robots.txt文件。搜索引擎默认全部页面都是可以访问的。
```package controller;
@Controller
@RequestMapping("/")
public class SeoController{
/**
* robots.txt 文件
* @param response
*/
@GetMapping("/robots.txt")
public void robots(HttpServletResponse response){
String sitemapUrl = domain + "/sitemap.xml";
try {
Writer writer = response.getWriter();
String lineSeparator = System.getProperty("line.separator", "\n");
writer.append("User-agent: *").append(lineSeparator);
writer.append("Disallow:/api/").append(lineSeparator);
writer.append("Disallow:/hapi/").append(lineSeparator);
writer.append("Crawl-delay: 5").append(lineSeparator);
writer.append("Sitemap: "+sitemapUrl);
} catch (IOException e) {
e.printStackTrace();
}
}
}
sitemap.xml文件 一看名就知道一个网站地图。是xml格式的。sitemap.xml文件的作用就是告知搜索引擎。这个网站有哪些网站是想要被收录的赶紧来收录我把。sitemap.xml文件中会包含一些链接的最新修改时间。网页的重要程度等。 sitemap.xml这个文件具有同样的问题。
<!-- sitemap -->
<dependency>
<groupId>com.github.dfabulich</groupId>
<artifactId>sitemapgen4j</artifactId>
<version>1.1.1</version>
</dependency>
@GetMapping("/sitemap.xml")
public void sitemapXml(HttpServletResponse response){
response.setContentType(MediaType.APPLICATION_XML_VALUE);
Writer writer = null;
try {
writer = response.getWriter();
String xml = seoHandler.createSiteMapXml();
writer.append(xml);
} catch (IOException e) {
e.printStackTrace();
}
}
@Value("${url}") //域名。
private String url;
public String createSiteMapXml(){
WebSitemapGenerator wsg = null;
try {wsg = new WebSitemapGenerator(domain);
// 首页 url
WebSitemapUrl url = new WebSitemapUrl.Options(domain)
.lastMod(DateUtils.format(new Date())).priority(1.0).changeFreq(ChangeFreq.DAILY).build();
wsg.addUrl(url);
// 文章的url
LambdaQueryWrapper<Article> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Article::getIfDelete, Constant.NOT_DEL);
wrapper.ne(Article::getReleaseStage, ReleaseStageEnum.UNPUBLISHED.getCode());
List<Article> articleList = articleMapper.selectList(wrapper);
for(Article article: articleList){
ArticleInfo articleInfo = articleInfoMapper.selectById(article.getId());
WebSitemapUrl categoryUrl = new WebSitemapUrl.Options(domain+"/article/"+article.getDoi())
.lastMod(DateUtils.format(articleInfo.getPubTime())).priority(1.0).changeFreq(ChangeFreq.DAILY).build();
wsg.addUrl(categoryUrl);
}
} catch (Exception e) {
log.error("create sitemap xml error:", e);
}
return String.join("", wsg.writeAsStrings());
}