原创 2021-06-01 19:22:28

简介


最近做了自己的blog网站。seo优化是自己建站必会遇到的问题。这次主要讲的是robots.txt文件与sitemap.xml文件。以及spring boot jar 包项目如何让搜索引擎通过url来查看到这个文件。

 

robots.txt


robots.txt文件是搜索引擎访问网站第一个要查看的文件。通过robots.txt文件搜索引擎可以确定哪些链接是搜索引擎可以访问的。哪些链接是不希望搜索引擎访问的。甚至可以告知允许哪些搜索引擎访问网站。相当于网站与搜索引擎之间的协议。在搜索引擎找到robots.txt文件后会以robots.txt来确定访问的范围。如果没有robots.txt文件。搜索引擎默认全部页面都是可以访问的。下面是我自己网站的robots.txt文件

User-agent: *
Disallow:/api/
Disallow:/hapi/
Crawl-delay: 5
Sitemap: https://www.jhone.top/sitemap.xml

因为我自己的项目是spring boot 打的jar包。访问服务器上的文件是十分麻烦的。所以在这里整理了一下spring boot jar包项目可以如何配置 robots.txt 与 sitemap.xml

 

package controller;



/**
* @author zzy
* @date 2021/3/30 11:46
*/
@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这个文件具有同样的问题。就是今天写了篇文章。明天上传了个资源。总不能每次都要重新打jar包这样也太麻烦了。下面是动态查询生成xml的方法。

引入依赖

<!-- sitemap -->
<dependency>
    <groupId>com.github.dfabulich</groupId>
    <artifactId>sitemapgen4j</artifactId>
    <version>1.0.6</version>
</dependency>



controller层代码。

@GetMapping("/sitemap.xml")
   public void sitemapXml(HttpServletResponse response){
       response.setContentType(MediaType.APPLICATION_XML_VALUE);
       Writer writer = null;
       try {
           writer = response.getWriter();
           String xml = seoHandler.createSiteMapXmlContent();
           writer.append(xml);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }



handler层代码

@Value("${blog.domain}") //域名。
private String domain;
public String createSiteMapXmlContent(){
       DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

       WebSitemapGenerator wsg = null;
       try {wsg = new WebSitemapGenerator(domain);
           // 首页 url
           WebSitemapUrl url = new WebSitemapUrl.Options(domain)
                   .lastMod(dateTimeFormatter.format(LocalDateTime.now())).priority(1.0).changeFreq(ChangeFreq.DAILY).build();
           wsg.addUrl(url);

           // 顶部菜单的url
           List<Menu> menuList = menuService.queryAll();
           for(Menu menu : menuList){
               WebSitemapUrl menuUrl = new WebSitemapUrl.Options(domain + menu.getLink())
                   .lastMod(dateTimeFormatter.format(LocalDateTime.now())).priority(1.0).changeFreq(ChangeFreq.DAILY).build();
               wsg.addUrl(menuUrl);
           }

           // 分类的url
           List<Category> categoryList = categoryService.queryAll();
           for(Category category : categoryList){
               WebSitemapUrl categoryUrl = new WebSitemapUrl.Options(domain+"/category/"+category.getId())
                   .lastMod(dateTimeFormatter.format(LocalDateTime.now())).priority(0.9).changeFreq(ChangeFreq.DAILY).build();
               wsg.addUrl(categoryUrl);
           }

           // 标签的url
           List<Label> labelList = labelService.queryAll();
           for(Label label : labelList){
               WebSitemapUrl categoryUrl = new WebSitemapUrl.Options(domain+"/label/"+label.getId())
                       .lastMod(dateTimeFormatter.format(LocalDateTime.now())).priority(0.9).changeFreq(ChangeFreq.DAILY).build();
               wsg.addUrl(categoryUrl);
           }

           // 文章的url
           List<ArticleVo> articleList = articleService.queryAll();
           for(ArticleVo articleVo: articleList){
               WebSitemapUrl categoryUrl = new WebSitemapUrl.Options(domain+"/read/"+articleVo.getId())
                       .lastMod(dateTimeFormatter.format(LocalDateTime.now())).priority(1.0).changeFreq(ChangeFreq.DAILY).build();
               wsg.addUrl(categoryUrl);
           }

           // 资源的url
           List<Ziyuan> ziyuanList =ziyuanService.queryAll();
           for(Ziyuan ziyuan : ziyuanList){
               WebSitemapUrl categoryUrl = new WebSitemapUrl.Options(domain+"/ziyuan/"+ziyuan.getId())
                       .lastMod(dateTimeFormatter.format(LocalDateTime.now())).priority(1.0).changeFreq(ChangeFreq.DAILY).build();
               wsg.addUrl(categoryUrl);
           }
       } catch (Exception e) {
           logger.error("create sitemap xml error:", e);
       }
       return String.join("", wsg.writeAsStrings());
   }
取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

延伸阅读
  1. seo之新链接自动推动到搜索引擎(java实现)
发表评论