Generating sitemap.xml
If available in Hex, the package can be installed as:
- Add sitemap to your list of dependencies in
mix.exs
:
def deps do
[{:sitemap, "~> 1.1"}]
end
- Ensure sitemap is started before your application:
def application do
[extra_applications: [:sitemap]]
end
sitemap helps you define a module with a generate
function which will build a sitemap for your site. You must decide how to call generate
- via a manual Mix task, a recurring background job, or whatever you choose.
The resulting sitemap is currently written to a file. Because some web hosts do not support writing to the filesystem, we plan to support uploading to S3 in the future.
You can always specify your own adapter module with a write/2
function and persist the sitemaps wherever you like.
defmodule Sitemaps do
use Sitemap
def generate do
create do
# list each URL that should be included
add "path1", priority: 0.5, changefreq: "hourly", expires: nil, mobile: true
# ...
end
# notify search engines (currently Google and Bing) of the updated sitemap
ping()
end
end
defmodule Sitemaps do
alias MyAppWeb.{Endpoint, Router.Helpers}
use Sitemap,
host: "http://#{Application.get_env(:myapp, Endpoint)[:url][:host]}",
files_path: "priv/static/sitemaps/",
public_path: "sitemaps/"
def generate do
create do
# list each URL that should be included, using your application's routes
add Helpers.entry_path(Endpoint, :index), priority: 0.5, changefreq: "hourly", expires: nil
add Helpers.entry_path(Endpoint, :about), priority: 0.5, changefreq: "hourly", expires: nil
# ...
end
# notify search engines (currently Google and Bing) of the updated sitemap
ping()
end
end
defmodule Sitemaps do
use Sitemap, compress: false, host: "http://example.com"
def generate do
create do
add "path1", priority: 0.5, changefreq: "hourly"
add "path2", priority: 0.5, changefreq: "hourly"
end
ping()
end
end
defmodule Sitemaps do
use Sitemap
def generate do
create compress: false, host: "http://example.com" do
add "path1", priority: 0.5, changefreq: "hourly"
add "path2", priority: 0.5, changefreq: "hourly"
end
ping()
end
end
use Mix.Config
config :sitemap, [
compress: false,
host: "http://example.com",
]
SITEMAP_COMPRESS=false SITEMAP_HOST=http://example.com mix run ./sitemap.exs
And you guys should follow mix task documents, here:
Name | Default Value | Environment | - |
---|---|---|---|
max_sitemap_files | 10000 | SITEMAP_MAXFILES | Max sitemap links per index file |
max_sitemap_links | 10000 | SITEMAP_MAXLINKS | Max links per sitemap |
max_sitemap_news | 1000 | SITEMAP_MAXNEWS | Max news sitemap per index_file |
max_sitemap_images | 1000 | SITEMAP_MAXIMAGES | Max images per url |
max_sitemap_filesize | 5000000 | SITEMAP_MAXFILESIZE | Bytes |
host | http://www.example.com | SITEMAP_HOST | Your domain, also host with http scheme. |
filename | sitemap | SITEMAP_FILENAME | Name of sitemap file. |
files_path | sitemap | SITEMAP_SITEMAPS_PATH | After domain path's location on URL. |
public_path | sitemap | SITEMAP_PUBLIC_PATH | Write sitemap files to this local path. |
adapter | Sitemap.Adapters.File | SITEMAP_ADAPTER | You'd change to write each filesystem |
verbose | true | SITEMAP_VERBOSE | Getting more information in sitemap working. |
compress | true | SITEMAP_COMPRESS | Gzip compression. |
create_index | auto | SITEMAP_CREATE_INDEX | Generating sitemps to this directory path. |
Current Features or To-Do
- Supports: generate kind of some sitemaps
- Supports: write some kind of filesystem and object storage.
- Filesystem
- S3
- Customizable sitemap working
- Notifies search engines (Google, Bing) of new sitemaps
- Gives you complete control over your sitemap contents and naming scheme
- Customizable sitemap compression
- Intelligent sitemap indexing
- All of completing Examples
defmodule Sitemaps do
use Sitemap, compress: false, host: "http://example.com"
def generate do
create do
add "index.html", news: [
publication_name: "Example",
publication_language: "en",
title: "My Article",
keywords: "my article, articles about myself",
stock_tickers: "SAO:PETR3",
publication_date: "2011-08-22",
access: "Subscription",
genres: "PressRelease"
]
end
end
end
<url>
<loc>http://www.example.com/index.html</loc>
<lastmod>2016-05-30T13:13:12Z</lastmod>
<news:news>
<news:publication>
<news:name>Example</news:name>
<news:language>en</news:language>
</news:publication>
<news:title>My Article</news:title>
<news:access>Subscription</news:access>
<news:genres>PressRelease</news:genres>
<news:keywords>my article, articles about myself</news:keywords>
<news:stock_tickers>SAO:PETR3</news:stock_tickers>
<news:publication_date>2011-08-22</news:publication_date>
</news:news>
</url>
Look at Creating a Google News Sitemap as required.
defmodule Sitemaps do
use Sitemap, compress: false, host: "http://example.com"
def generate do
create do
add "index.html", images: [
loc: "http://example.com/image.jpg",
caption: "Caption",
title: "Title",
license: "https://github.com/ikeikeikeike/sitemap/blob/master/LICENSE",
geo_location: "Limerick, Ireland",
]
end
end
end
<url>
<loc>http://www.example.com/image.html</loc>
<lastmod>2016-05-31T13:32:40Z</lastmod>
<image:image>
<image:loc>http://example.com/image.jpg</image:loc>
<image:caption>Caption</image:caption>
<image:title>Title</image:title>
<image:license>https://github.com/ikeikeikeike/sitemap/blob/master/LICENSE</image:license>
<image:geo_location>Limerick, Ireland</image:geo_location>
</image:image>
</url>
Look at Image sitemaps as required.
defmodule Sitemaps do
use Sitemap, compress: true, host: "http://example.com"
def generate do
create do
add "index.html", videos: [
thumbnail_loc: "http://www.example.com/thumbs/123.jpg",
title: "Grilling steaks for summer",
description: "Alkis shows you how to get perfectly done steaks every time",
content_loc: "http://www.example.com/video123.flv",
player_loc: "http://www.example.com/videoplayer.swf?video=123",
allow_embed: true,
autoplay: true,
duration: 600,
expiration_date: "2009-11-05T19:20:30+08:00",
publication_date: "2007-11-05T19:20:30+08:00",
rating: 0.5,
view_count: 1000,
tags: ~w(tag1 tag2 tag3),
tag: "tag4",
category: "Category",
family_friendly: true,
restriction: "IE GB US CA",
relationship: true,
gallery_loc: "http://cooking.example.com",
gallery_title: "Cooking Videos",
price: "1.99",
price_currency: "EUR",
price_type: "own",
price_resolution: "HD",
uploader: "GrillyMcGrillerson",
uploader_info: "http://www.example.com/users/grillymcgrillerson",
live: true,
requires_subscription: false
]
end
end
end
<url>
<loc>http://www.example.com/video.html</loc>
<lastmod>2016-05-31T12:51:47Z</lastmod>
<video:video>
<video:title>Grilling steaks for summer</video:title>
<video:description>Alkis shows you how to get perfectly done steaks every time</video:description>
<video:player_loc allow_embed="yes" autoplay="ap=1">http://www.example.com/videoplayer.swf?video=123</video:player_loc>
<video:content_loc>http://www.example.com/video123.flv</video:content_loc>
<video:thumbnail_loc>http://www.example.com/thumbs/123.jpg</video:thumbnail_loc>
<video:duration>600</video:duration>
<video:gallery_loc title="Cooking Videos">http://cooking.example.com</video:gallery_loc>
<video:rating>0.5</video:rating>
<video:view_count>1000</video:view_count>
<video:expiration_date>2009-11-05T19:20:30+08:00</video:expiration_date>
<video:publication_date>2007-11-05T19:20:30+08:00</video:publication_date>
<video:tag>tag1</video:tag>
<video:tag>tag2</video:tag>
<video:tag>tag3</video:tag>
<video:tag>tag4</video:tag>
<video:category>Category</video:category>
<video:family_friendly>yes</video:family_friendly>
<video:restriction relationship="allow">IE GB US CA</video:restriction>
<video:uploader info="http://www.example.com/users/grillymcgrillerson">GrillyMcGrillerson</video:uploader>
<video:price currency="EUR" resolution="HD" type="own">1.99</video:price>
<video:live>yes</video:live>
<video:requires_subscription>no</video:requires_subscription>
</video:video>
</url>
Look at Video sitemaps as required.
defmodule Sitemaps do
use Sitemap, compress: true, host: "http://example.com"
def generate do
create do
add "index.html", alternates: [
href: "http://www.example.de/index.html",
lang: "de",
nofollow: true,
media: "only screen and (max-width: 640px)"
]
end
end
end
<url>
<loc>http://www.example.com/video.html</loc>
<lastmod>2016-06-01T14:05:05Z</lastmod>
<xhtml:link href="http://www.example.de/index.html" hreflang="de" media="only screen and (max-width: 640px)" rel="alternate nofollow"/>
</url>
Look at Alternate Links as required.
defmodule Sitemaps do
use Sitemap, compress: true, host: "http://example.com"
def generate do
create do
add "geo.html", alternates: [
format: "kml"
]
end
end
end
<url>
<loc>http://www.example.com/geo.html</loc>
<lastmod>2016-06-01T14:15:25Z</lastmod>
<geo:geo>
<geo:format>kml</geo:format>
</geo:geo>
</url>
Look at Geo Sitemaps as required.
defmodule Sitemaps do
use Sitemap, compress: true, host: "http://example.com"
def generate do
create do
add "mobile.html", priority: 0.5, changefreq: "hourly", mobile: true
end
end
end
<url>
<loc>http://www.example.com/mobile.html</loc>
<lastmod>2016-06-01T14:24:44Z</lastmod>
<changefreq>hourly</changefreq>
<priority>0.5</priority>
<mobile:mobile/>
</url>
Look at Mobile Sitemaps as required.
defmodule Sitemaps do
use Sitemap, compress: true, host: "http://example.com"
def generate do
create do
add "pagemap.html", pagemap: [
dataobjects: [[
type: "document",
id: "hibachi",
attributes: [
[name: "name", value: "Dragon"],
[name: "review", value: "3.5"],
]
]]
]
end
end
end
<url>
<loc>http://www.example.com/pagemap.html</loc>
<lastmod>2016-06-02T17:01:17Z</lastmod>
<PageMap>
<DataObject id="hibachi" type="document">
<Attribute name="name">Dragon</Attribute>
<Attribute name="review">3.5</Attribute>
</DataObject>
</PageMap>
</url>
Look at PageMap sitemap as required.
create do
add_to_index "/mysitemap1.xml.gz"
add_to_index "/alternatemap.xml"
add_to_index "/changehost.xml.gz", host: "http://something.com"
add ...
add ....
end
<?xml version='1.0' encoding='utf-8'?>
<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://example.com/mysitemap1.xml.gz</loc>
<lastmod>2017-05-19T11:42:45+09:00</lastmod>
</sitemap>
<sitemap>
<loc>http://example.com/mysitemap2.xml.gz</loc>
<lastmod>2017-05-19T11:42:45+09:00</lastmod>
</sitemap>
<sitemap>
<loc>http://something.com/changehost.xml.gz</loc>
<lastmod>2017-05-19T11:42:45+09:00</lastmod>
</sitemap>
<sitemap>
<loc>http://example.com/sitemap1.xml.gz</loc>
<lastmod>2017-05-19T11:42:45+09:00</lastmod>
</sitemap>
</sitemapindex>