-
Available since OmniFaces 3.10
The <o:sitemapUrl>
is a component which renders the given target URL or Faces view ID as a sitemap URL with support for adding additional query string parameters to the URL via nested <f:param>
and <o:param>
.
This component is largely based off the Url
component behind <o:url>
, but then tailored specifically for usage in sitemap.xml
file. The ViewResourceHandler
must be registered in faces-config.xml
in order to get Faces components to run in /sitemap.xml
.
Values
You can supply the sitemap URL via either the value
attribute or the viewId
attribute. When both are specified, the value
attribute takes precedence and the viewId
attribute is ignored.
Domain
When the target URL is specified as viewId
, then the domain of the target URL defaults to the current domain. It is possible to provide a full qualified domain name (FQDN) via the domain
attribute which the URL is to be prefixed with. This can be useful if a canonical page shall point to a different domain or a specific subdomain.
Valid formats and values for domain
attribute are:
<o:sitemapUrl ... domain="https://example.com" />
<o:sitemapUrl ... domain="//example.com" />
<o:sitemapUrl ... domain="example.com" />
<o:sitemapUrl ... domain="/" />
<o:sitemapUrl ... domain="//" />
The domain
value will be validated by URL
and throw an illegal argument exception when invalid. If the domain equals /
, then the URL becomes domain-relative. If the domain equals or starts with //
, or does not contain any scheme, then the URL becomes scheme-relative. If the value
attribute is specified, then the domain
attribute is ignored.
Request parameters
You can add query string parameters to the URL via nested <f:param>
and <o:param>
. To conditionally add or override, use the disabled
attribute of <f|o:param>
.
Usage
Usage example of /sitemap.xml
as a Faces view:
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:o="http://omnifaces.org/ui"
>
<ui:repeat value="#{sitemapBean.products}" var="product">
<o:sitemapUrl viewId="/product.xhtml" lastModified="#{product.lastModified}" changeFrequency="weekly" priority="1.0">
<o:param name="id" value="#{product}" converter="productConverter" />
</o:sitemapUrl>
</ui:repeat>
</urlset>
Demo
You can find the demo source code below and here the generated sitemap.xml.
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:f="jakarta.faces.core"
xmlns:ui="jakarta.faces.facelets"
xmlns:o="http://omnifaces.org/ui"
>
<f:view contentType="text/xml">
<o:sitemapUrl viewId="/whatsnew" />
<ui:repeat value="#{app.pages}" var="_page">
<o:sitemapUrl viewId="#{_page.viewId}" />
</ui:repeat>
</f:view>
</urlset>