}
 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() {
 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/)")
 
        viper.SetDefault("MetadataFormat", "toml")
        viper.SetDefault("DisableRSS", false)
+       viper.SetDefault("DisableSitemap", false)
        viper.SetDefault("ContentDir", "content")
        viper.SetDefault("LayoutDir", "layouts")
        viper.SetDefault("StaticDir", "static")
                viper.Set("DisableRSS", DisableRSS)
        }
 
+       if hugoCmdV.PersistentFlags().Lookup("disableSitemap").Changed {
+               viper.Set("DisableSitemap", DisableSitemap)
+       }
+
        if hugoCmdV.PersistentFlags().Lookup("verbose").Changed {
                viper.Set("Verbose", Verbose)
        }
 
                return
        }
        s.timerStep("render and write homepage")
+       if err = s.RenderSitemap(); err != nil {
+               return
+       }
+       s.timerStep("render and write Sitemap")
        return
 }
 
        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))
 
 
   </channel>
 </rss>`)
 
+       t.AddInternalTemplate("_default", "sitemap.xml", `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+  {{ range .Data.Pages }}
+  <url>
+    <loc>{{ .Permalink }}</loc>
+    <lastmod>{{ safeHtml ( .Date.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ with .Sitemap.ChangeFreq }}
+    <changefreq>{{ . }}</changefreq>{{ end }}{{ with .Sitemap.Priority }}
+    <priority>{{ . }}</priority>{{ end }}
+  </url>
+  {{ end }}
+</urlset>`)
+
        t.AddInternalTemplate("", "disqus.html", `{{ if .Site.DisqusShortname }}<div id="disqus_thread"></div>
 <script type="text/javascript">
     var disqus_shortname = '{{ .Site.DisqusShortname }}';