簡介
最近做了自己的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