golang高效生成XML网站地图插件库go-sitemap-generator的使用
Golang高效生成XML网站地图插件库go-sitemap-generator的使用
简介
go-sitemap-generator是Go语言中最简单的生成网站地图(Sitemap)的方式。从2.0.0版本开始,该库已作为Go模块提供。
基本使用示例
package main
import (
"github.com/ikeikeikeike/go-sitemap-generator/v2/stm"
)
func main() {
sm := stm.NewSitemap(1)
// 在添加条目之前必须先调用Create方法
sm.Create()
sm.Add(stm.URL{{"loc", "home"}, {"changefreq", "always"}, {"mobile", true}})
sm.Add(stm.URL{{"loc", "readme"}})
sm.Add(stm.URL{{"loc", "aboutme"}, {"priority", 0.1}})
sm.Finalize().PingSearchEngines()
}
安装
作为Go模块安装
go get github.com/ikeikeikeike/go-sitemap-generator/v2/stm
传统安装方式
go get gopkg.in/ikeikeikeike/go-sitemap-generator.v1/stm
go get gopkg.in/ikeikeikeike/go-sitemap-generator.v2/stm
主要特性
-
支持生成多种类型的网站地图:
- 新闻网站地图
- 视频网站地图
- 图片网站地图
- 地理位置网站地图
- 移动网站地图
- 替代链接
-
支持网站地图存储适配器:
- 文件系统
- S3存储
-
自定义网站地图工作方式
-
通知搜索引擎(Google, Bing)有新网站地图
-
完全控制网站地图内容和命名方案
详细使用指南
设置并发度
禁用并发(设置为1个CPU):
sm := stm.NewSitemap(1)
使用所有可用CPU:
sm := stm.NewSitemap(0)
禁用非必要输出
sm := stm.NewSitemap(1)
sm.SetVerbose(false)
通知搜索引擎
sm.Finalize().PingSearchEngines()
添加新的搜索引擎:
sm.Finalize().PingSearchEngines("http://newengine.com/ping?url=%s")
配置选项
// 设置网站主机名
sm.SetDefaultHost("http://www.example.com")
// 设置网站地图远程主机
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemap-generator/")
// 设置本地写入路径
sm.SetPublicPath("tmp/")
// 设置网站地图路径
sm.SetSitemapsPath("sitemaps/")
// 设置S3适配器
sm.SetAdapter(&stm.S3Adapter{Region: "ap-northeast-1", Bucket: "your-bucket", ACL: "public-read"})
// 更改输出文件名
sm.SetFilename("new_filename")
高级功能示例
上传到S3
package main
import (
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func main() {
sm := stm.NewSitemap(1)
sm.SetDefaultHost("http://example.com")
sm.SetSitemapsPath("sitemap-generator") // 默认: public
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemap-generator/")
sm.SetAdapter(&stm.S3Adapter{
Region: "ap-northeast-1",
Bucket: "your-bucket",
ACL: "public-read",
Creds: credentials.NewEnvCredentials(),
})
sm.Create()
sm.Add(stm.URL{{"loc", "home"}, {"changefreq", "always"}, {"mobile", true}})
sm.Add(stm.URL{{"loc", "readme"}})
sm.Add(stm.URL{{"loc", "aboutme"}, {"priority", 0.1}})
sm.Finalize().PingSearchEngines()
}
新闻网站地图
sm.Add(stm.URL{
{"loc", "/news"},
{"news", stm.URL{
{"publication", stm.URL{
{"name", "Example"},
{"language", "en"},
},
},
{"title", "My Article"},
{"keywords", "my article, articles about myself"},
{"stock_tickers", "SAO:PETR3"},
{"publication_date", "2011-08-22"},
{"access", "Subscription"},
{"genres", "PressRelease"},
},},
})
视频网站地图
sm.Add(stm.URL{
{"loc", "/videos"},
{"video", stm.URL{
{"thumbnail_loc", "http://www.example.com/video1_thumbnail.png"},
{"title", "Title"},
{"description", "Description"},
{"content_loc", "http://www.example.com/cool_video.mpg"},
{"category", "Category"},
{"tag", []string{"one", "two", "three"}},
{"player_loc", stm.Attrs{"https://example.com/p/flash/moogaloop/6.2.9/moogaloop.swf?clip_id=26", map[string]string{"allow_embed": "Yes", "autoplay": "autoplay=1"}}},
},
},
})
图片网站地图
sm.Add(stm.URL{
{"loc", "/images"},
{"image", []stm.URL{
{{"loc", "http://www.example.com/image.png"}, {"title", "Image"}},
{{"loc", "http://www.example.com/image1.png"}, {"title", "Image1"}},
},},
})
地理位置网站地图
sm.Add(stm.URL{
{"loc", "/geos"},
{"geo", stm.URL{
{"format", "kml"},
},},
})
移动网站地图
sm.Add(stm.URL{{"loc", "mobiles"}, {"mobile", true}})
完整示例
package main
import (
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func main() {
sm := stm.NewSitemap(0)
sm.SetDefaultHost("http://yourhost.com")
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemaps/")
sm.SetSitemapsPath("sitemaps/")
sm.SetFilename("anothername")
sm.SetCompress(true)
sm.SetVerbose(true)
sm.SetAdapter(&stm.S3Adapter{Region: "ap-northeast-1", Bucket: "your-bucket"})
sm.Create()
sm.Add(stm.URL{{"loc", "/home"}, {"changefreq", "daily"}})
sm.Add(stm.URL{{"loc", "/abouts"}, {"mobile", true}})
sm.Add(stm.URL{{"loc", "/news"},
{"news", stm.URL{
{"publication", stm.URL{
{"name", "Example"},
{"language", "en"},
},
},
{"title", "My Article"},
{"keywords", "my article, articles about myself"},
{"stock_tickers", "SAO:PETR3"},
{"publication_date", "2011-08-22"},
{"access", "Subscription"},
{"genres", "PressRelease"},
},},
})
sm.Add(stm.URL{{"loc", "/images"},
{"image", []stm.URL{
{{"loc", "http://www.example.com/image.png"}, {"title", "Image"}},
{{"loc", "http://www.example.com/image1.png"}, {"title", "Image1"}},
},},
})
sm.Add(stm.URL{{"loc", "/videos"},
{"video", stm.URL{
{"thumbnail_loc", "http://www.example.com/video1_thumbnail.png"},
{"title", "Title"},
{"description", "Description"},
{"content_loc", "http://www.example.com/cool_video.mpg"},
{"category", "Category"},
{"tag", []string{"one", "two", "three"}},
{"player_loc", stm.Attrs{"https://example.com/p/flash/moogaloop/6.2.9/moogaloop.swf?clip_id=26", map[string]string{"allow_embed": "Yes", "autoplay": "autoplay=1"}}},
},},
})
sm.Add(stm.URL{{"loc", "/geos"},
{"geo", stm.URL{
{"format", "kml"},
},},
})
sm.Finalize().PingSearchEngines("http://newengine.com/ping?url=%s")
}
Web服务器示例
package main
import (
"log"
"net/http"
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func buildSitemap() *stm.Sitemap {
sm := stm.NewSitemap(1)
sm.SetDefaultHost("http://example.com")
sm.Create()
sm.Add(stm.URL{{"loc", "/"}, {"changefreq", "daily"}})
// 注意: 不要调用sm.Finalize(),因为它会将底层数据结构从内存刷新到磁盘
return sm
}
func main() {
sm := buildSitemap()
mux := http.NewServeMux()
mux.HandleFunc("/sitemap.xml", func(w http.ResponseWriter, r *http.Request) {
// Go的web服务器会自动设置正确的Content-Type头
w.Write(sm.XMLContent())
return
})
log.Fatal(http.ListenAndServe(":8080", mux))
}
测试
准备:
$ go get github.com/clbanning/mxj
运行测试:
$ go test -v -cover -race ./...
更多关于golang高效生成XML网站地图插件库go-sitemap-generator的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang高效生成XML网站地图插件库go-sitemap-generator的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用go-sitemap-generator高效生成XML网站地图
go-sitemap-generator是一个高效的Go语言库,专门用于生成符合标准的XML网站地图(Sitemap)。网站地图对于SEO优化非常重要,它帮助搜索引擎爬虫更好地发现和索引网站内容。
安装
首先安装go-sitemap-generator库:
go get github.com/ikeikeikeike/go-sitemap-generator/v2
基本使用示例
package main
import (
"log"
"time"
sm "github.com/ikeikeikeike/go-sitemap-generator/v2"
)
func main() {
// 创建sitemap生成器
sm := sm.NewSitemap()
// 设置基本配置
sm.SetVerbose(true)
sm.SetCompress(true)
sm.SetPublicPath("public") // 输出目录
sm.SetSitemapsPath("sitemaps") // sitemap文件存放子目录
sm.SetHostname("https://www.example.com") // 你的网站域名
// 创建sitemap索引文件
sm.Create()
// 添加URL到sitemap
sm.Add(sm.URL{
Loc: "https://www.example.com/page1",
Lastmod: time.Now(),
Changefreq: "daily",
Priority: 0.8,
})
sm.Add(sm.URL{
Loc: "https://www.example.com/page2",
Lastmod: time.Now().Add(-24 * time.Hour),
Changefreq: "weekly",
Priority: 0.5,
})
// 生成sitemap文件
err := sm.Finalize()
if err != nil {
log.Fatal(err)
}
log.Println("Sitemap generated successfully!")
}
高级功能
1. 分块生成大sitemap
当URL数量很多时(超过50,000个),可以自动分块生成:
sm := sm.NewSitemap()
sm.SetMaxURLs(50000) // 设置每个sitemap文件最大URL数
// ...添加URL...
sm.Finalize()
2. 自定义文件名
sm.SetFilename("custom_sitemap") // 设置基础文件名
3. 添加图片和视频sitemap
// 添加带图片的URL
sm.Add(sm.URL{
Loc: "https://www.example.com/image-page",
Image: []sm.Image{
{
Loc: "https://www.example.com/image1.jpg",
Title: "Image 1",
},
{
Loc: "https://www.example.com/image2.jpg",
Title: "Image 2",
},
},
})
// 添加带视频的URL
sm.Add(sm.URL{
Loc: "https://www.example.com/video-page",
Video: []sm.Video{
{
ThumbnailLoc: "https://www.example.com/video1-thumb.jpg",
Title: "Video 1",
Description: "Description of video 1",
ContentLoc: "https://www.example.com/video1.mp4",
},
},
})
4. 自动ping搜索引擎
生成后自动通知搜索引擎:
sm.SetPing(true) // 启用自动ping
sm.SetPingGoogle(true)
sm.SetPingBing(true)
实际应用示例
下面是一个更完整的示例,模拟从数据库获取数据生成sitemap:
package main
import (
"log"
"time"
sm "github.com/ikeikeikeike/go-sitemap-generator/v2"
)
type Page struct {
URL string
Modified time.Time
Priority float32
}
func getPagesFromDB() []Page {
// 模拟从数据库获取页面数据
return []Page{
{"https://www.example.com/home", time.Now(), 1.0},
{"https://www.example.com/about", time.Now().Add(-24 * time.Hour), 0.8},
{"https://www.example.com/contact", time.Now().Add(-48 * time.Hour), 0.5},
}
}
func main() {
sm := sm.NewSitemap()
sm.SetVerbose(true)
sm.SetCompress(true)
sm.SetPublicPath("public")
sm.SetHostname("https://www.example.com")
sm.SetPing(true)
sm.Create()
pages := getPagesFromDB()
for _, page := range pages {
sm.Add(sm.URL{
Loc: page.URL,
Lastmod: page.Modified,
Changefreq: "weekly",
Priority: page.Priority,
})
}
err := sm.Finalize()
if err != nil {
log.Fatal(err)
}
log.Println("Sitemap generated and search engines notified")
}
最佳实践
- 更新频率:根据内容实际更新频率设置changefreq,不要夸大
- 优先级:合理设置priority,首页通常设为1.0,重要页面0.8-0.9,次要页面0.5左右
- 自动生成:建议设置定时任务定期重新生成sitemap
- robots.txt:确保在robots.txt中引用你的sitemap位置
- 验证:生成后使用Google Search Console验证sitemap
go-sitemap-generator库提供了灵活而强大的功能,可以满足大多数网站的sitemap生成需求,是Go语言项目中实现SEO优化的好帮手。