diff --git a/commands/hugo.go b/commands/hugo.go
index df6a063c4..cced30143 100644
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -48,7 +48,7 @@ Complete documentation is available at http://hugo.spf13.com`,
}
var hugoCmdV *cobra.Command
-var BuildWatch, Draft, UglyUrls, Verbose, Logging, VerboseLog, DisableRSS bool
+var BuildWatch, Draft, UglyUrls, Verbose, Logging, VerboseLog, DisableRSS, DisableSitemap bool
var Source, Destination, Theme, BaseUrl, CfgFile, LogFile string
func Execute() {
@@ -68,6 +68,7 @@ func AddCommands() {
func init() {
HugoCmd.PersistentFlags().BoolVarP(&Draft, "build-drafts", "D", false, "include content marked as draft")
HugoCmd.PersistentFlags().BoolVar(&DisableRSS, "disableRSS", false, "Do not build RSS files")
+ HugoCmd.PersistentFlags().BoolVar(&DisableSitemap, "disableSitemap", false, "Do not build Sitemap file")
HugoCmd.PersistentFlags().StringVarP(&Source, "source", "s", "", "filesystem path to read files relative from")
HugoCmd.PersistentFlags().StringVarP(&Destination, "destination", "d", "", "filesystem path to write files to")
HugoCmd.PersistentFlags().StringVarP(&Theme, "theme", "t", "", "theme to use (located in /themes/THEMENAME/)")
@@ -95,6 +96,7 @@ func InitializeConfig() {
viper.SetDefault("MetadataFormat", "toml")
viper.SetDefault("DisableRSS", false)
+ viper.SetDefault("DisableSitemap", false)
viper.SetDefault("ContentDir", "content")
viper.SetDefault("LayoutDir", "layouts")
viper.SetDefault("StaticDir", "static")
@@ -120,6 +122,10 @@ func InitializeConfig() {
viper.Set("DisableRSS", DisableRSS)
}
+ if hugoCmdV.PersistentFlags().Lookup("disableSitemap").Changed {
+ viper.Set("DisableSitemap", DisableSitemap)
+ }
+
if hugoCmdV.PersistentFlags().Lookup("verbose").Changed {
viper.Set("Verbose", Verbose)
}
diff --git a/hugolib/node.go b/hugolib/node.go
index 8ec0b4a2b..1accd03ad 100644
--- a/hugolib/node.go
+++ b/hugolib/node.go
@@ -28,6 +28,7 @@ type Node struct {
Keywords []string
Params map[string]interface{}
Date time.Time
+ Sitemap Sitemap
UrlPath
}
diff --git a/hugolib/site.go b/hugolib/site.go
index e7b8badc8..f20cabc6f 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -220,6 +220,10 @@ func (s *Site) Render() (err error) {
return
}
s.timerStep("render and write homepage")
+ if err = s.RenderSitemap(); err != nil {
+ return
+ }
+ s.timerStep("render and write Sitemap")
return
}
@@ -740,6 +744,36 @@ func (s *Site) RenderHomePage() error {
return nil
}
+func (s *Site) RenderSitemap() error {
+ if viper.GetBool("DisableSitemap") {
+ return nil
+ }
+
+ optChanged := false
+
+ n := s.NewNode()
+ n.Data["Pages"] = s.Pages
+
+ // Force `UglyUrls` option to force `sitemap.xml` file name
+ switch s.Target.(type) {
+ case *target.Filesystem:
+ s.Target.(*target.Filesystem).UglyUrls = true
+ optChanged = true
+ }
+
+ smLayouts := []string{"sitemap.xml", "_default/sitemap.xml", "_internal/_default/sitemap.xml"}
+ err := s.render(n, "sitemap.xml", s.appendThemeTemplates(smLayouts)...)
+ if err != nil {
+ return err
+ }
+
+ if optChanged {
+ s.Target.(*target.Filesystem).UglyUrls = viper.GetBool("UglyUrls")
+ }
+
+ return nil
+}
+
func (s *Site) Stats() {
jww.FEEDBACK.Printf("%d pages created \n", len(s.Pages))
diff --git a/hugolib/sitemap.go b/hugolib/sitemap.go
new file mode 100644
index 000000000..9510555aa
--- /dev/null
+++ b/hugolib/sitemap.go
@@ -0,0 +1,18 @@
+package hugolib
+
+import jww "github.com/spf13/jwalterweatherman"
+
+type Sitemap struct {
+ ChangeFreq string
+ Priority float32
+}
+
+func (s Sitemap) Validate() {
+ if s.Priority < 0 {
+ jww.WARN.Printf("Sitemap priority should be greater than 0, found: %f", s.Priority)
+ s.Priority = 0
+ } else if s.Priority > 1 {
+ jww.WARN.Printf("Sitemap priority should be lesser than 1, found: %f", s.Priority)
+ s.Priority = 1
+ }
+}
diff --git a/hugolib/template_embedded.go b/hugolib/template_embedded.go
index 2555f9a21..29d7ce150 100644
--- a/hugolib/template_embedded.go
+++ b/hugolib/template_embedded.go
@@ -65,6 +65,17 @@ func (t *GoHtmlTemplate) EmbedTemplates() {
`)
+ t.AddInternalTemplate("_default", "sitemap.xml", `