- migration 202610280003: settings links_new_tab (default on),
nofollow_domains and sponsored_domains; robots llms_enabled and
llms_intro (used by the llms.txt commit)
- SEO settings Links tab: the new-tab switch and the two domain lists,
one domain per line, lowercased, refused with settings.domain_invalid
naming the line; writable through seo_update_settings
- the resolve answer of an ok page carries outbound {new_tab,
nofollow_domains, sponsored_domains}; no existing key changes
403 lines
20 KiB
YAML
403 lines
20 KiB
YAML
plugin:
|
||
name: SEO
|
||
description: Search engine metadata for every content type, URL rules and global SEO settings.
|
||
nav:
|
||
pages: Pages
|
||
robots: robots.txt
|
||
notfound: 404 log
|
||
redirects: Redirects
|
||
seo: SEO
|
||
history: History
|
||
rules: URL rules
|
||
transfer: Import and export
|
||
permissions:
|
||
tab: SEO
|
||
manage: Manage SEO
|
||
manage_comment: Edit the SEO tab of every content type, URL rules, redirects, robots.txt and the SEO settings, in the admin and through MCP.
|
||
tab:
|
||
seo: SEO
|
||
field:
|
||
snippet: Search result preview
|
||
description_comment: Leave empty to use the description template, then the content's own excerpt.
|
||
keyphrase: Focus keyphrase
|
||
keyphrase_comment: Checked in the preview above. Never shown on the site.
|
||
robots_comment: “Inherit” follows a URL rule for this address, then the content type default from the SEO settings. Also sent as an X-Robots-Tag header.
|
||
og_title_comment: Used by Facebook, LinkedIn and X. Empty fields use the SEO title, description and the content's image.
|
||
og_image_comment: Recommended 1200 × 630 px. Shared by all languages of this record.
|
||
effective: What search engines get
|
||
title: SEO title
|
||
title_comment: Leave empty to use the title template from the SEO settings.
|
||
title_comment_rule: Leave empty to keep the title of the page or record at this address.
|
||
description: Meta description
|
||
canonical: Canonical URL
|
||
canonical_comment: Leave empty for this page's own address. Accepts a path (/blog/post) or a full URL, also on another domain.
|
||
robots: Search engine indexing
|
||
robots_comment_rule: “Inherit” keeps the setting of the record at this address, then the content type default.
|
||
og_title: Social title
|
||
og_description: Social description
|
||
og_image: Social image
|
||
robots:
|
||
invalid: The robots value is not valid. Use index or noindex, follow or nofollow and the advanced directives, separated by commas.
|
||
inherit: Inherit
|
||
site_default: Site default
|
||
staging_title: This is not the production environment
|
||
title: "robots.txt"
|
||
tab_file: "robots.txt"
|
||
tab_bots: "AI bots"
|
||
staging_text: "Crawlers get “Disallow: /” and every page is sent with “X-Robots-Tag: noindex”, whatever you save here. The text below applies in production."
|
||
content: "robots.txt rules"
|
||
content_comment: "Sitemap lines and the AI bot rules are added automatically when the file is served."
|
||
tester: "Test an address"
|
||
served: "What crawlers get"
|
||
served_comment: "The saved version, as served at /robots.txt. Save to update it."
|
||
served_production: "Production"
|
||
too_large: "robots.txt may be at most 500 KB. Google ignores everything after that."
|
||
test: "Test URL"
|
||
test_invalid: "The test request is not valid."
|
||
url_required: "Enter an address starting with /."
|
||
blocks_noindex:
|
||
one: ":count noindex address is blocked by these rules, so Google cannot see its noindex: :list"
|
||
other: ":count noindex addresses are blocked by these rules, so Google cannot see their noindex: :list"
|
||
status:
|
||
rule_title: A URL rule overrides part of this tab
|
||
rule_text: The rule for “:url” sets :fields. Change them in SEO › URL rules.
|
||
canonical_noindex: The canonical URL “:url” is set to noindex, so search engines may ignore both pages.
|
||
canonical_redirected: The canonical URL “:url” redirects to “:target”. Point the canonical to the final address.
|
||
staging: On this environment every page is served with noindex and robots.txt blocks everything (non-production lock).
|
||
settings:
|
||
placeholders: Placeholders
|
||
placeholders_code: Placeholder
|
||
placeholders_meaning: Replaced with
|
||
category: SEO
|
||
label: SEO settings
|
||
description: Title templates, default descriptions, indexing rules, address format and search engine verification.
|
||
tab_general: General
|
||
tab_indexing: Indexing
|
||
tab_urls: Addresses
|
||
tab_verification: Verification
|
||
tab_links: Links
|
||
links_new_tab: Open links to other sites in a new tab
|
||
links_new_tab_comment: "On: links to other sites open in a new tab with rel=noopener, and screen readers hear that they do. Off: they open in the same tab. Their nofollow, sponsored and ugc attributes apply either way."
|
||
nofollow_domains: Domains that always get nofollow
|
||
sponsored_domains: Domains that always get sponsored
|
||
domains_comment: One domain per line, e.g. example.com (subdomains included).
|
||
domain_invalid: "Line :line: “:value” is not a domain. Write it without https:// and without a path."
|
||
site_name: Site name
|
||
site_name_comment: Replaces %site% in title templates.
|
||
title_template: Title template
|
||
title_template_comment: 'Used when a page has no SEO title. Default: the page title, a vertical bar and the site name (%title% followed by %site%).'
|
||
home_template: Home page title template
|
||
default_description: Default meta description
|
||
default_description_comment: Used when neither the page, its template nor its content provides a description.
|
||
default_og_image: Default social image
|
||
twitter_site: X (Twitter) account
|
||
twitter_site_comment: Your handle with @, e.g. @summercms. Sent as twitter:site.
|
||
type_inject: Show the SEO tab
|
||
type_inject_comment: Off hides the tab. Saved values are kept and still used.
|
||
type_title_template: Title template
|
||
type_title_template_comment: Leave empty to use the general title template.
|
||
type_description_template: Description template
|
||
type_robots: Default indexing
|
||
query_params: Query parameters
|
||
query_params_comment: Decides which parameters stay in the canonical URL. A trailing * matches a prefix, e.g. utm_*.
|
||
param_name: Parameter
|
||
param_kind: Kind
|
||
param_path: Only under path
|
||
param_content: 'Content: stays in the canonical'
|
||
param_filter: 'Filter or sort: dropped, page gets noindex, follow'
|
||
param_tracking: 'Tracking: dropped'
|
||
param_path_comment: 'Empty: the whole site. Example: /katalog/*'
|
||
param_add: Add parameter
|
||
noindex_paths: Addresses never indexed
|
||
noindex_paths_comment: One address or pattern per line, e.g. /konto/* or /logowanie. These pages get noindex, nofollow. Pages behind sign-in are marked automatically.
|
||
search_paths: Internal search results
|
||
search_paths_comment: One address or pattern per line, e.g. /szukaj. These pages get noindex, follow.
|
||
url_host: Domain form
|
||
url_host_keep: Do not change
|
||
url_host_www: Always with www
|
||
url_host_bare: Always without www
|
||
url_slash: Trailing slash
|
||
url_slash_keep: Do not change
|
||
url_slash_add: Always add (/blog/)
|
||
url_slash_remove: Always remove (/blog)
|
||
url_lowercase: Lowercase addresses
|
||
url_change_comment: A change sends every non-matching address to the new form with a 301. Check the site's current addresses first.
|
||
url_fixed_comment: 'Always on: HTTPS, removal of double slashes and /index.html, a single 301 hop to the final address, and strict addresses (every segment must match the record).'
|
||
verify_google: Google verification code
|
||
verify_bing: Bing verification code
|
||
verify_yandex: Yandex verification code
|
||
verify_code_comment: Paste only the content value of the meta tag. It is added to the home page.
|
||
verify_other: Other verification meta tags
|
||
verify_other_name: Meta name
|
||
verify_other_content: Content
|
||
verify_other_add: Add meta tag
|
||
verify_files: Verification files
|
||
verify_files_filename: File name
|
||
verify_files_body: File content
|
||
verify_files_add: Add file
|
||
verify_files_comment: Served from the site root, e.g. /google1234.html.
|
||
verify_filename_invalid: Use a plain file name ending in .html, .txt or .xml, without slashes, e.g. google1234.html.
|
||
verify_filename_taken: Another verification file already uses this name.
|
||
template_unknown: Unknown placeholder “:placeholder”. Use one from the table below the templates.
|
||
rules:
|
||
new: New URL rule
|
||
list_title: URL rules
|
||
name: URL rule
|
||
url: Address
|
||
match: Match
|
||
match_exact: Exact address
|
||
match_pattern: Pattern
|
||
note: Note
|
||
note_comment: Why this rule exists, e.g. the audit it comes from. Not shown on the site.
|
||
col_overrides: Sets
|
||
col_updated: Updated
|
||
url_comment_full: A URL rule wins over the record's SEO tab and the SEO settings. A path such as / or /blog?tag=*. In a pattern, * matches any text.
|
||
url_taken: A rule for this address and match already exists.
|
||
url_invalid: Start the address with /. Use * only in a pattern.
|
||
list_empty: No URL rules yet. A rule sets SEO for an address that has no record behind it, such as the home page or a filter URL.
|
||
delete_confirm: Delete this URL rule? The address falls back to its record and the SEO settings. You can undo it in History.
|
||
delete_selected_confirm:
|
||
one: Delete :count URL rule? You can undo it in History.
|
||
other: Delete :count URL rules? You can undo it in History.
|
||
history:
|
||
list_title: History
|
||
name: Change
|
||
when: When
|
||
who: Who
|
||
via: Via
|
||
what: What
|
||
change: Change
|
||
batch: Batch
|
||
via_admin: Admin
|
||
via_mcp: MCP
|
||
via_import: Import
|
||
via_auto: Automatic
|
||
via_undo: Undo
|
||
what_record: SEO of :type “:title” (:locale)
|
||
what_rule: URL rule “:url”
|
||
what_redirect: Redirect “:url”
|
||
what_robots: robots.txt
|
||
what_settings: SEO settings
|
||
what_notfound: 404 log entry “:url”
|
||
what_page: Page “:url”
|
||
change_cell:
|
||
one: ':field: :before → :after'
|
||
other: ':count fields changed'
|
||
created: (created)
|
||
deleted: (deleted)
|
||
state_undone: Undone
|
||
filter_via: Via
|
||
filter_when: When
|
||
filter_who: Who
|
||
preview: Change details
|
||
diff_field: Field
|
||
diff_before: Before
|
||
diff_after: After
|
||
list_empty: No SEO changes recorded yet. Every change from the admin, MCP or an import appears here and can be undone.
|
||
undo: Undo this change
|
||
undo_confirm: Undo this change? The values before it are restored, and the undo is recorded as a new change.
|
||
undone: Change undone.
|
||
undo_batch: Undo the whole batch
|
||
undo_batch_confirm: Undo every change of this batch? It is undone as a whole or not at all.
|
||
batch_undone: Batch undone.
|
||
undo_stale: "“:field” has changed since: :author changed it on :time. Undoing would overwrite that. Nothing was undone."
|
||
undo_loop: "Undoing would create a redirect loop: :path. Nothing was undone."
|
||
undo_gone: The :type this change belongs to no longer exists. Nothing was undone.
|
||
undo_done: This change is already undone.
|
||
undo_unsupported: This change cannot be undone here. Nothing was undone.
|
||
record: record
|
||
kind_rule: URL rule
|
||
kind_redirect: redirect
|
||
kind_robots: robots.txt
|
||
kind_settings: SEO settings
|
||
kind_notfound: 404 log entry
|
||
kind_page: registry page
|
||
jobs:
|
||
generate_entries: 'SEO: generate entries'
|
||
effective:
|
||
property: Property
|
||
value: Value
|
||
source: Source
|
||
locale: “:locale” — :url
|
||
source_rule: URL rule
|
||
source_record: This record
|
||
source_template: Template
|
||
source_global: SEO settings
|
||
source_content: Content
|
||
source_default: Site default
|
||
no_url: This language has no address yet. Fill in its slug and save.
|
||
placeholder:
|
||
title: The content's title
|
||
description: The content's own description or excerpt
|
||
site: The site name
|
||
image:
|
||
invalid: The file must be a JPEG, PNG, GIF or WebP image.
|
||
too_big: The image may not be larger than 10 MB.
|
||
url_invalid: The image must be a path or an http(s) address.
|
||
forbidden: You may not upload SEO images.
|
||
snippet:
|
||
action: Check duplicates
|
||
invalid: The preview request is not valid.
|
||
redirects:
|
||
auto_created: The address changed, so a 301 from “:old” to “:new” was created. :count earlier redirects now point straight to the new address.
|
||
loop: "This redirect would create a loop: :path. Nothing was saved."
|
||
chain_notice: "Saved, but this redirect is part of a chain: :path. Visitors take :count hops. Point “:source” straight to “:final”."
|
||
target_required: "Enter the address to redirect to, or choose 410 Gone."
|
||
target_gone: "A 410 Gone rule sends visitors nowhere. Clear the target, or choose 301 or 302."
|
||
target_invalid: "Enter a path starting with / or a full http(s) address."
|
||
regex_invalid: "This is not a valid regular expression: :error"
|
||
source_invalid: "Start the address with /. Use * only in a pattern."
|
||
source_taken: "Another redirect already uses this address and match."
|
||
new: "New redirect"
|
||
list_title: "Redirects"
|
||
name: "Redirect"
|
||
source: "From"
|
||
source_comment: "Exact: /old-post. Pattern: /old/* (the matched part replaces * in the target). Regex: ^/p/(\\d+)$ (use $1 in the target)."
|
||
match: "Match"
|
||
match_exact: "Exact"
|
||
match_pattern: "Pattern"
|
||
match_regex: "Regex"
|
||
target: "To"
|
||
target_comment: "A path or a full URL. Leave empty for 410 Gone."
|
||
status: "Status"
|
||
status_301: "301 Moved permanently"
|
||
status_302: "302 Found (temporary)"
|
||
status_410: "410 Gone"
|
||
query: "Query string"
|
||
query_ignore: "Ignore it"
|
||
query_pass: "Pass it to the target"
|
||
ignore_case: "Ignore letter case"
|
||
trailing_slash: "Match with and without a trailing slash"
|
||
note: "Note"
|
||
origin: "Origin"
|
||
origin_manual: "Manual"
|
||
origin_slug: "Address change"
|
||
origin_import: "Import"
|
||
origin_mcp: "MCP"
|
||
origin_notfound: "404 log"
|
||
updated: "Updated"
|
||
state_chain: "Chain"
|
||
filter_chain: "Chains"
|
||
filter_chain_only: "Only chains"
|
||
filter_chain_hide: "Hide chains"
|
||
list_empty: "No redirects yet. Create one, import a CSV file, or create one from the 404 log."
|
||
delete_confirm: "Delete this redirect? Its source address will return 404 again. You can undo it in History."
|
||
delete_selected_confirm:
|
||
one: "Delete :count redirect? Its source address will return 404 again. You can undo it in History."
|
||
other: "Delete :count redirects? Their source addresses will return 404 again. You can undo it in History."
|
||
notfound:
|
||
list_title: "404 log"
|
||
name: "404 address"
|
||
url: "Address"
|
||
hits: "Hits"
|
||
last_hit: "Last hit"
|
||
first_seen: "First seen"
|
||
referer: "Last referer"
|
||
state_resolved: "Resolved"
|
||
filter_status: "Status"
|
||
filter_status_open: "Open"
|
||
filter_status_resolved: "Resolved"
|
||
preview: "Address that returned 404"
|
||
resolved_hint: "Resolved by “:rule”. This address no longer returns 404."
|
||
redirect: "Create redirect…"
|
||
redirect_prompt: "Redirect to (301)"
|
||
redirect_placeholder: "/new-address"
|
||
redirect_comment: "A path or a full URL. To use 302, edit the redirect afterwards."
|
||
redirect_confirm: "Create a 301 redirect from this address?"
|
||
redirected: "Redirect “:url” → “:target” created."
|
||
gone: "Mark as gone (410)"
|
||
gone_confirm: "Answer this address with 410 Gone? Search engines drop it faster than a 404. You can undo it in History."
|
||
gone_selected_confirm: "Answer the selected addresses with 410 Gone? You can undo it in History."
|
||
gone_done: "410 Gone created for “:url”."
|
||
gone_selected_done: "410 Gone created for the selected addresses."
|
||
has_rule: "A redirect for “:url” already exists. Edit it in Redirects."
|
||
list_empty: "No 404 errors recorded. Addresses that return 404 appear here with their hit count."
|
||
delete_selected_confirm:
|
||
one: "Remove :count address from the log? It is added again on its next 404."
|
||
other: "Remove :count addresses from the log? They are added again on their next 404."
|
||
bots:
|
||
search_comment: "AI search and answers. Off blocks it in robots.txt."
|
||
training_comment: "Collects content for AI training. Off blocks it in robots.txt."
|
||
user_comment: "Fetches a page when a user asks for it. Off blocks it in robots.txt."
|
||
api:
|
||
field_unknown: This is not an SEO field.
|
||
keyphrase_record_only: A focus keyphrase belongs to a record; a URL rule has none.
|
||
canonical_invalid: The canonical URL must be a path starting with / or an absolute http(s) URL.
|
||
bot_unknown: This is not an AI bot of the robots.txt screen.
|
||
value_invalid: This value is not valid here.
|
||
locale_unknown: "The record behind this address has no locale “:locale”."
|
||
type_unknown: No content type with this key is registered.
|
||
batch_too_large: "A batch takes at most :max changes."
|
||
change_not_found: The record this change names does not exist.
|
||
op_unknown: "Unknown operation “:op”."
|
||
conflict_noindex_published: "“:url” is a published page listed in the sitemaps; noindex removes it from search results."
|
||
transfer:
|
||
title: Import and export
|
||
delimiter: CSV delimiter
|
||
delimiter_comma: Comma (,)
|
||
delimiter_semicolon: Semicolon (;), as Excel uses in Polish
|
||
delimiter_comment: Files are UTF-8 with a byte order mark, so Excel opens Polish characters correctly.
|
||
widget: Files
|
||
preview: Preview import
|
||
applied:
|
||
one: "Applied :count change as one batch. You can undo it in History."
|
||
other: "Applied :count changes as one batch. You can undo them in History."
|
||
stale: The data changed after the preview. Preview the file again before applying.
|
||
unreadable: The file could not be read as CSV. Check the delimiter and that the first row holds the column names.
|
||
missing_column: "The file has no “:column” column. Download an export to see the expected columns."
|
||
dataset_unknown: Choose redirects, URL rules or SEO of records.
|
||
too_large: This file is larger than 60 KB. Split it into smaller files, or import it through MCP.
|
||
too_large_mcp: This file is larger than 900 KB. Import it in smaller parts.
|
||
export_too_large: This export is too large to download here. Export it through MCP, page by page.
|
||
refused_blocks: Fix the refused rows in the file and preview it again. Nothing is applied while a row is refused.
|
||
token_invalid: This preview is no longer valid. Preview the file again.
|
||
row_loop: "Creates a redirect loop: :path"
|
||
row_chain: "Creates a chain: :path"
|
||
row_canonical: "The canonical URL redirects to “:target”"
|
||
row_rule: "No record at this address: a URL rule is created"
|
||
row_invalid: ":field: :message"
|
||
pages:
|
||
type: Site page
|
||
list_title: Pages
|
||
name: Page
|
||
new: New page
|
||
list_empty: No pages yet. Add the site's own pages here, such as the home page, contact or offer pages, so they get an SEO tab and a place in the sitemaps. The site can also report its pages automatically.
|
||
url: Address
|
||
title: Name
|
||
kind: Type
|
||
origin: Origin
|
||
content_updated: Content changed
|
||
reported: Last reported
|
||
kind_page: Page
|
||
kind_offer: Offer
|
||
kind_service: Service
|
||
kind_landing: Landing page
|
||
origin_manual: Manual
|
||
origin_reported: Reported by the site
|
||
origin_mcp: MCP
|
||
state_missing: Not on the site
|
||
filter_missing: Not on the site
|
||
filter_missing_only: Only missing
|
||
filter_missing_hide: Hide missing
|
||
url_comment: The page's path in each language, e.g. /kontakt. Leave a language empty when the page has no version in it.
|
||
title_comment: Used for the default SEO title, the HTML sitemap and breadcrumbs.
|
||
kind_comment: "Decides the sitemap file and the default structured data: offers and services become Service."
|
||
parent: Parent page
|
||
parent_none: None (top level)
|
||
parent_comment: Places the page under another one in breadcrumbs.
|
||
content_updated_comment: Sent as lastmod in the sitemaps. Change it when the page's content changes on the site.
|
||
note: Note
|
||
note_comment: Not shown on the site.
|
||
status_reported: Reported by the site on :time.
|
||
status_missing: The site's last report (:time) did not include this address. Check whether the page still exists, then delete it here or redirect it.
|
||
url_required: Enter the address in the default language.
|
||
url_invalid: Start the address with / and leave out the domain.
|
||
url_taken: Another page already uses this address.
|
||
url_owned: This address belongs to :type “:title”. Set its SEO there.
|
||
parent_loop: A page cannot be placed under itself or one of its subpages.
|
||
delete_confirm: Delete this page from the registry? Its SEO tab is deleted with it, and the address leaves the sitemaps. A page the site reports comes back with its next report.
|
||
delete_selected_confirm:
|
||
one: "Delete :count page from the registry? Its SEO tab is deleted with it."
|
||
other: "Delete :count pages from the registry? Their SEO tabs are deleted with them."
|
||
home_title: Home
|