NOTE: This version(v1) is now archived. The new location of the version can be found here!
go-sitemap-generator is the easiest way to generate Sitemaps in Go.
package main
import (
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func main() {
sm := stm.NewSitemap()
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()
}
Installation
$ go get gopkg.in/ikeikeikeike/go-sitemap-generator.v1/stm
Features
Current Features or To-Do
Getting Started
Preventing Output
To disable all non-essential output you can set sm.SetVerbose
to false
.
To disable output inline use the following:
sm := stm.NewSitemap()
sm.SetVerbose(false)
Pinging Search Engines
PingSearchEngines notifies search engines of changes once a sitemap
has been generated or changed. The library will append Google and Bing to any engines passed in to the function.
sm.Finalize().PingSearchEngines()
If you want to add new search engine
, you can pass that in to the function:
sm.Finalize().PingSearchEngines("http://newengine.com/ping?url=%s")
Options
sm.SetDefaultHost("http://www.example.com")
sm.SetSitemapsHost("http://s3.amazonaws.com/sitemap-generator/")
sm.SetPublicPath("tmp/")
sm.SetSitemapsPath("sitemaps/")
sm.SetAdapter(&stm.S3Adapter{Region: "ap-northeast-1", Bucket: "your-bucket", ACL: "public-read"})
sm.SetFilename("new_filename")
Upload sitemap to S3
Recently I disabled this module here.
package main
import (
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func main() {
sm := stm.NewSitemap()
sm.SetDefaultHost("http://example.com")
sm.SetSitemapsPath("sitemap-generator")
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()
}
News sitemaps
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",
}})
Look at Creating a Google News Sitemap as required.
Video sitemaps
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"}},
}})
Look at Video sitemaps as required.
Image sitemaps
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"},
}})
Look at Image sitemaps as required.
Geo sitemaps
sm.Add(stm.URL{"loc": "/geos", "geo": stm.URL{
"format": "kml",
}})
Couldn't find Geo sitemaps example, although it's similar to:
<url>
<loc>/geos</loc>
<geo:geo>
<geo:format>kml</geo:format>
</geo:geo>
</url>
Mobile sitemaps
sm.Add(stm.URL{"loc": "mobiles", "mobile": true})
Look at Feature phone sitemaps as required.
Full example
package main
import (
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func main() {
sm := stm.NewSitemap()
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")
}
Webserver example
package main
import (
"log"
"net/http"
"github.com/ikeikeikeike/go-sitemap-generator/stm"
)
func buildSitemap() *stm.Sitemap {
sm := stm.NewSitemap()
sm.SetDefaultHost("http://example.com")
sm.Create()
sm.Add(stm.URL{"loc": "/", "changefreq": "daily"})
return sm
}
func main() {
sm := buildSitemap()
mux := http.NewServeMux()
mux.HandleFunc("/sitemap.xml", func(w http.ResponseWriter, r *http.Request) {
w.Write(sm.XMLContent())
return
})
log.Fatal(http.ListenAndServe(":8080", mux))
}
Documentation
How to test.
Preparation:
$ go get github.com/clbanning/mxj
Run tests:
$ go test -v -cover -race ./...