天天看點

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
seo

繼續閱讀