Sitemap generation and management context for PhoenixKit.
This module provides functions for generating and managing XML and HTML sitemaps using Settings for configuration storage. Sitemaps help search engines discover and index site content.
Core Functions
System Control
enabled?/0- Check if sitemap module is enabledenable_system/0- Enable sitemap moduledisable_system/0- Disable sitemap module
Configuration
get_config/0- Get current sitemap configurationget_base_url/0- Get base URL for sitemap generationbuild_url/1- Build full URL from relative pathschedule_enabled?/0- Check if automatic generation is enabledget_schedule_interval_hours/0- Get generation interval in hours
Content Settings
include_entities?/0- Check if entities should be included (all entity types)include_blogs?/0- Check if blog posts should be includedinclude_static?/0- Check if static pages should be included
HTML Sitemap
html_enabled?/0- Check if HTML sitemap is enabledget_html_style/0- Get HTML sitemap display styleget_default_changefreq/0- Get default change frequencyget_default_priority/0- Get default URL priority
Generation
regenerate/1- Trigger sitemap regenerationupdate_generation_stats/1- Update generation statisticsget_cached_xml/0- Get cached XML sitemapget_cached_html/0- Get cached HTML sitemapinvalidate_cache/0- Clear sitemap cache
Settings Keys
All configuration is stored in the Settings system:
sitemap_enabled- Enable/disable sitemap module (boolean)sitemap_schedule_enabled- Enable automatic generation (boolean)sitemap_schedule_interval_hours- Generation interval (integer)sitemap_include_entities- Include entities in sitemap (boolean, all entity types)sitemap_include_blogs- Include blog posts (boolean)sitemap_include_static- Include static pages (boolean)sitemap_base_url- Base URL for sitemap (string, fallback to site_url)sitemap_html_enabled- Enable HTML sitemap (boolean)sitemap_html_style- HTML display style (hierarchical/flat/grouped)sitemap_default_changefreq- Default change frequency (string)sitemap_default_priority- Default URL priority (string)sitemap_last_generated- Last generation timestamp (ISO8601)sitemap_url_count- Number of URLs in sitemap (integer)
Usage Examples
# Check if sitemap module is enabled
if PhoenixKit.Modules.Sitemap.enabled?() do
# Generate sitemap
PhoenixKit.Modules.Sitemap.regenerate(scope)
end
# Get configuration
config = PhoenixKit.Modules.Sitemap.get_config()
# => %{
# enabled: true,
# schedule_enabled: true,
# schedule_interval_hours: 24,
# include_entities: true,
# include_blogs: true,
# include_static: true,
# base_url: "https://example.com",
# html_enabled: true,
# html_style: "hierarchical",
# default_changefreq: "weekly",
# default_priority: "0.5",
# last_generated: "2025-12-02T10:30:00Z",
# url_count: 150
# }
# Build full URLs
url = PhoenixKit.Modules.Sitemap.build_url("/about")
# => "https://example.com/about"
# Get cached sitemaps
xml = PhoenixKit.Modules.Sitemap.get_cached_xml()
html = PhoenixKit.Modules.Sitemap.get_cached_html()
# Invalidate cache after regeneration
PhoenixKit.Modules.Sitemap.invalidate_cache()
Summary
Functions
Builds a full URL from a relative path using the configured base URL.
Stores HTML sitemap content in cache.
Stores XML sitemap content in cache.
Clears generation statistics.
Disables the sitemap module.
Enables the sitemap module.
Returns true when the sitemap module is enabled.
Returns true when sitemap is in flat mode (single <urlset>).
Returns the base URL for sitemap generation.
Returns the cached HTML sitemap content.
Returns the cached XML sitemap content.
Returns the current sitemap configuration as a map.
Returns the default change frequency for sitemap URLs.
Returns the default priority for sitemap URLs.
Returns the HTML sitemap display style.
Returns the timestamp when sitemap was last generated.
Returns per-module generation stats from Settings.
Returns the scheduled generation interval in hours.
Returns the number of URLs in the current sitemap.
Returns true if HTML sitemap generation is enabled.
Returns true if blog posts should be included in sitemap.
Returns true if entities should be included in sitemap.
Alias for include_blogs?/0 - reads the same sitemap_include_blogs key.
Returns true if the registration page should be included in the sitemap.
Returns true if shop pages should be included in sitemap.
Returns true if static pages should be included in sitemap.
Invalidates sitemap cache.
Returns true if publishing posts should be split into per-blog sitemap files.
Triggers sitemap regeneration.
Returns true if router discovery should be enabled.
Returns true if automatic sitemap generation is enabled.
Updates generation statistics after sitemap creation.
Updates per-module generation stats in Settings.
Functions
Builds a full URL from a relative path using the configured base URL.
Examples
iex> PhoenixKit.Modules.Sitemap.build_url("/about")
"https://example.com/about"
iex> PhoenixKit.Modules.Sitemap.build_url("contact")
"https://example.com/contact"
Stores HTML sitemap content in cache.
Examples
iex> PhoenixKit.Modules.Sitemap.cache_html(html_content)
{:ok, %PhoenixKit.Settings.Setting{}}
Stores XML sitemap content in cache.
Examples
iex> PhoenixKit.Modules.Sitemap.cache_xml(xml_content)
{:ok, %PhoenixKit.Settings.Setting{}}
@spec clear_generation_stats() :: :ok
Clears generation statistics.
Called when cache is invalidated to indicate the sitemap file no longer exists. Next request will regenerate the sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.clear_generation_stats()
:ok
Disables the sitemap module.
Examples
iex> PhoenixKit.Modules.Sitemap.disable_system()
{:ok, %PhoenixKit.Settings.Setting{}}
Enables the sitemap module.
Examples
iex> PhoenixKit.Modules.Sitemap.enable_system()
{:ok, %PhoenixKit.Settings.Setting{}}
@spec enabled?() :: boolean()
Returns true when the sitemap module is enabled.
Examples
iex> PhoenixKit.Modules.Sitemap.enabled?()
false
iex> PhoenixKit.Modules.Sitemap.enable_system()
iex> PhoenixKit.Modules.Sitemap.enabled?()
true
@spec flat_mode?() :: boolean()
Returns true when sitemap is in flat mode (single <urlset>).
Flat mode is active when Router Discovery is enabled — all URLs from all sources are merged into a single sitemap.xml. When Router Discovery is off, index mode is used with per-module sitemap files.
@spec get_base_url() :: String.t()
Returns the base URL for sitemap generation.
Uses site_url from Settings. Returns empty string if not configured.
Examples
iex> PhoenixKit.Modules.Sitemap.get_base_url()
"https://example.com"
@spec get_cached_html() :: String.t() | nil
Returns the cached HTML sitemap content.
Returns nil if no cached sitemap exists.
Examples
iex> PhoenixKit.Modules.Sitemap.get_cached_html()
"<html>...</html>"
@spec get_cached_xml() :: String.t() | nil
Returns the cached XML sitemap content.
Returns nil if no cached sitemap exists.
Examples
iex> PhoenixKit.Modules.Sitemap.get_cached_xml()
"<?xml version="1.0" encoding="UTF-8"?>\n<urlset>...</urlset>"
@spec get_config() :: map()
Returns the current sitemap configuration as a map.
Examples
iex> PhoenixKit.Modules.Sitemap.get_config()
%{
enabled: true,
schedule_enabled: true,
schedule_interval_hours: 24,
include_entities: true,
include_blogs: true,
include_pages: true,
include_static: true,
base_url: "https://example.com",
html_enabled: true,
html_style: "hierarchical",
default_changefreq: "weekly",
default_priority: "0.5",
last_generated: "2025-12-02T10:30:00Z",
url_count: 150
}
@spec get_default_changefreq() :: String.t()
Returns the default change frequency for sitemap URLs.
Examples
iex> PhoenixKit.Modules.Sitemap.get_default_changefreq()
"weekly"
@spec get_default_priority() :: String.t()
Returns the default priority for sitemap URLs.
Examples
iex> PhoenixKit.Modules.Sitemap.get_default_priority()
"0.5"
@spec get_html_style() :: String.t()
Returns the HTML sitemap display style.
Valid values: "hierarchical", "flat", "grouped"
Examples
iex> PhoenixKit.Modules.Sitemap.get_html_style()
"hierarchical"
@spec get_last_generated() :: String.t() | nil
Returns the timestamp when sitemap was last generated.
Returns ISO8601 timestamp string or nil if never generated.
Examples
iex> PhoenixKit.Modules.Sitemap.get_last_generated()
"2025-12-02T10:30:00Z"
@spec get_module_stats() :: [map()]
Returns per-module generation stats from Settings.
@spec get_schedule_interval_hours() :: integer()
Returns the scheduled generation interval in hours.
Examples
iex> PhoenixKit.Modules.Sitemap.get_schedule_interval_hours()
24
@spec get_url_count() :: integer()
Returns the number of URLs in the current sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.get_url_count()
150
@spec html_enabled?() :: boolean()
Returns true if HTML sitemap generation is enabled.
Examples
iex> PhoenixKit.Modules.Sitemap.html_enabled?()
true
@spec include_blogs?() :: boolean()
Returns true if blog posts should be included in sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.include_blogs?()
true
@spec include_entities?() :: boolean()
Returns true if entities should be included in sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.include_entities?()
true
@spec include_publishing?() :: boolean()
Alias for include_blogs?/0 - reads the same sitemap_include_blogs key.
@spec include_registration?() :: boolean()
Returns true if the registration page should be included in the sitemap.
Default: false (registration pages are excluded by default).
@spec include_shop?() :: boolean()
Returns true if shop pages should be included in sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.include_shop?()
true
@spec include_static?() :: boolean()
Returns true if static pages should be included in sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.include_static?()
true
@spec invalidate_cache() :: :ok
Invalidates sitemap cache.
This should be called after regenerating sitemaps to ensure fresh content is served.
Examples
iex> PhoenixKit.Modules.Sitemap.invalidate_cache()
:ok
@spec publishing_split_by_group?() :: boolean()
Returns true if publishing posts should be split into per-blog sitemap files.
Default: false (all publishing posts in a single file).
Triggers sitemap regeneration.
This function will be called by the Generator module to perform the actual sitemap generation. Pass optional scope for audit logging.
Examples
iex> PhoenixKit.Modules.Sitemap.regenerate(scope)
{:ok, %{xml: xml_content, html: html_content, url_count: 150}}
@spec router_discovery_enabled?() :: boolean()
Returns true if router discovery should be enabled.
Router discovery automatically scans the parent application's router for GET routes and includes them in the sitemap.
Examples
iex> PhoenixKit.Modules.Sitemap.router_discovery_enabled?()
true
@spec schedule_enabled?() :: boolean()
Returns true if automatic sitemap generation is enabled.
Examples
iex> PhoenixKit.Modules.Sitemap.schedule_enabled?()
true
Updates generation statistics after sitemap creation.
Accepts a map with :url_count and optionally :timestamp.
Examples
iex> PhoenixKit.Modules.Sitemap.update_generation_stats(%{url_count: 150})
{:ok, %{last_generated: "2025-12-02T10:30:00Z", url_count: 150}}
iex> PhoenixKit.Modules.Sitemap.update_generation_stats(%{
...> url_count: 150,
...> timestamp: ~U[2025-12-02 10:30:00Z]
...> })
{:ok, %{last_generated: "2025-12-02T10:30:00Z", url_count: 150}}
Updates per-module generation stats in Settings.