Packages
phoenix_kit
1.7.78
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/modules/seo/seo.ex
defmodule PhoenixKit.Modules.SEO do
@moduledoc """
SEO module for PhoenixKit.
Provides project-wide search visibility controls. Currently supports a
`noindex, nofollow` directive for staging environments, and will be extended
with additional SEO options in the future.
"""
use PhoenixKit.Module
alias PhoenixKit.Dashboard.Tab
alias PhoenixKit.Settings
@module_enabled_key "seo_module_enabled"
@no_index_key "seo_no_index"
@module_name "seo"
@doc """
Indicates whether the SEO module is available in the admin.
"""
def module_enabled? do
Settings.get_boolean_setting(@module_enabled_key, false)
end
@doc """
Enables the SEO module (exposes the settings page).
"""
def enable_module do
Settings.update_boolean_setting_with_module(@module_enabled_key, true, @module_name)
end
@doc """
Disables the SEO module and clears any active directives.
"""
def disable_module do
case Settings.update_boolean_setting_with_module(@module_enabled_key, false, @module_name) do
{:ok, _setting} = result ->
# Ensure site becomes indexable once the module is disabled
_ = update_no_index(false)
result
{:error, _changeset} = error ->
error
end
end
@doc """
Returns true when the `noindex, nofollow` directive is active.
"""
def no_index_enabled? do
Settings.get_boolean_setting(@no_index_key, false)
end
@doc """
Enables the global `noindex, nofollow` directive.
"""
def enable_no_index do
update_no_index(true)
end
@doc """
Disables the global `noindex, nofollow` directive.
"""
def disable_no_index do
update_no_index(false)
end
@doc """
Updates the directive to the provided boolean value.
"""
def update_no_index(enabled?) when is_boolean(enabled?) do
Settings.update_boolean_setting_with_module(@no_index_key, enabled?, @module_name)
end
@impl PhoenixKit.Module
@doc """
Returns configuration metadata for dashboard cards and settings pages.
"""
def get_config do
%{
module_enabled: module_enabled?(),
no_index_enabled: no_index_enabled?()
}
end
# ============================================================================
# Module Behaviour Callbacks
# ============================================================================
@impl PhoenixKit.Module
def module_key, do: "seo"
@impl PhoenixKit.Module
def module_name, do: "SEO"
@impl PhoenixKit.Module
def enabled?, do: module_enabled?()
@impl PhoenixKit.Module
def enable_system, do: enable_module()
@impl PhoenixKit.Module
def disable_system, do: disable_module()
@impl PhoenixKit.Module
def permission_metadata do
%{
key: "seo",
label: "SEO",
icon: "hero-magnifying-glass",
description: "Meta tags, Open Graph, and search optimization"
}
end
@impl PhoenixKit.Module
def settings_tabs do
[
Tab.new!(
id: :admin_settings_seo,
label: "SEO",
icon: "hero-magnifying-glass-circle",
path: "seo",
priority: 930,
level: :admin,
parent: :admin_settings,
permission: "seo"
)
]
end
end