seo优化之robots.txt 与 sitemap.xml

简介

最近做了自己的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());
    }

最后欢迎大家访问我的个人博客网站:www.jhone.top

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

残城碎梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值