defmodule BerrypodWeb.SeoController do use BerrypodWeb, :controller alias Berrypod.{Pages, Products} def robots(conn, _params) do base = BerrypodWeb.Endpoint.url() content = """ User-agent: * Allow: / Disallow: /admin/ Disallow: /api/ Disallow: /users/ Disallow: /webhooks/ Disallow: /checkout/ Sitemap: #{base}/sitemap.xml """ conn |> put_resp_content_type("text/plain") |> send_resp(200, content) end def sitemap(conn, _params) do base = BerrypodWeb.Endpoint.url() products = Products.list_visible_products() categories = Products.list_categories() static_pages = [ {"/", "daily", "1.0"}, {"/collections/all", "daily", "0.9"}, {"/about", "monthly", "0.5"}, {"/contact", "monthly", "0.5"}, {"/delivery", "monthly", "0.5"}, {"/privacy", "monthly", "0.3"}, {"/terms", "monthly", "0.3"} ] category_pages = Enum.map(categories, fn cat -> {"/collections/#{cat.slug}", "daily", "0.8"} end) product_pages = Enum.map(products, fn product -> {"/products/#{product.slug}", "weekly", "0.9"} end) custom_pages = Pages.list_custom_pages() |> Enum.filter(& &1.published) |> Enum.map(fn page -> {"/#{page.slug}", "weekly", "0.6"} end) all_pages = static_pages ++ category_pages ++ product_pages ++ custom_pages entries = Enum.map_join(all_pages, "\n", fn {path, changefreq, priority} -> " \n" <> " #{base}#{path}\n" <> " #{changefreq}\n" <> " #{priority}\n" <> " " end) xml = """ #{entries} """ conn |> put_resp_content_type("application/xml") |> send_resp(200, xml) end end