Problems serving sitemap.xml

Hello :slight_smile:
I have problems serving a dynamic sitemap.xml in Phoenix 1.7, the browser tells me he got parsing issues.

this is how the xml looks like:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.abc.ch</loc>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>

</urlset>

I was checking the documentation about Phoenix Controller and Phoenix.Template, but coulndn’t find the issue…

This is my route:

get("/sitemap.xml", SitemapController, :index)

This is my sitemap_controller.ex

defmodule ClubWeb.SitemapController do
  use ClubWeb, :controller

  alias Club.{Artists, Events}

  def index(conn, _params) do

    events = Events.list_events()
    artists = Artists.list_artists()

    conn
    |> put_resp_content_type("text/xml")
    |> put_root_layout(false)
    |> render(:index, layout: false, events: events, artists: artists)
  end
end

This is my sitemap_html.ex

defmodule ClubWeb.SitemapHTML do

  use ClubWeb, :html
  embed_templates "sitemap_html/*"

  def format_date(date) do
    date
    |> DateTime.from_naive!("Etc/UTC")
    |> DateTime.to_date()
    |> to_string()
  end
end

and this is my sitemap_html/index.xml.eex (The xml is reduced to the minimum to show here)

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.abc.ch</loc>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>

</urlset>

Thanks for taking time!

Did you add xml as a format in ClubWeb module?
After formats: [:html, :json]

Yes, I did already.

Ahh, I see now. Change to

  def index(conn, _params) do
    conn
    |> put_resp_content_type("text/xml")
    |> render("index.xml", layout: false, events: events, artists: artists)
  end
defmodule ClubWeb.SitemapXML do
  use ClubWeb, :html

  embed_templates "sitemap_xml/*"
end
lib/club_web/controllers/sitemap_xml/index.xml.eex

And as an optional bonus, in the routes, skip the browser pipeline

Amazing, changing it to “index.xml” was the solution. Thank you so much!!