Metatags provides an easy and flexible way to set both default and page specific metatags that are used for SEO, Facebook, Twitter etc.
Documentation is available at https://hexdocs.pm/metatags.
Add metatags
to your list of dependencies in mix.exs
:
def deps do
[{:metatags, "~> 0.3.1"}]
end
Add the plug to your router and configure the defaults
(You can use Application.get_env/3
if you'd like to extract it into the
configuration file).
defmodule MyRouter do
use Plug.Conn
plug Metatags.Plug,
sitename: "My_app",
title_separator: "-",
default_tags: %{
"title" => "Welcome!",
"description" => "My_app is a great app",
"keywords" => ["My_app", "great", "elixir"]
}
In your controller put page specific data:
conn
|> Metatags.put("title", "About My_app")
|> Metatags.put("description", "My app is just a regular app")
|> Metatags.put("og", %{"image" => "http://myimage.jpg"}) # You can have nested structures
|> Metatags.put("og:image", "http://myimage.jpg") # or define them inline
|> Metatags.put("canonical", "http://my-url.com")
|> Metatags.put("alternate", "http://en.my-url.com", hreflang: "en-GB")
And print them out inside your head tag
<!DOCTYPE>
<html>
<head>
<%= Metatags.print_tags(@conn) %>
</head>
<body>
<h1>Welcome</h1>
</body>
</html>