TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
:navigation-title: Features
|
||||
|
||||
.. include:: /Includes.rst.txt
|
||||
.. _features:
|
||||
|
||||
============================================
|
||||
Features of the TYPO3 system extension "seo"
|
||||
============================================
|
||||
|
||||
The TYPO3 system extension :composer:`typo3/cms-seo` offers multiple tools and
|
||||
fields that can be used to improve visibility of a TYPO3 site in search engines:
|
||||
|
||||
.. contents::
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
:hidden:
|
||||
|
||||
*
|
||||
|
||||
.. _seo-page-properties:
|
||||
|
||||
Additional tabs "SEO" and "Social media" in the page properties
|
||||
===============================================================
|
||||
|
||||
After `Installation <https://docs.typo3.org/permalink/typo3/cms-seo:installation>`_
|
||||
two additional tabs are available in the page properties.
|
||||
|
||||
SEO
|
||||
This tab contains additional fields for the
|
||||
`title tag <https://docs.typo3.org/permalink/typo3/cms-seo:seo-page-title-provider>`_
|
||||
in the HTML header, for the description meta tag, for robots instruction, the
|
||||
`Canonical URL <https://docs.typo3.org/permalink/typo3/cms-seo:canonical-url>`_
|
||||
and for priorities used in the
|
||||
`XML Sitemap <https://docs.typo3.org/permalink/typo3/cms-seo:xml-sitemap>`_.
|
||||
Social media
|
||||
This tab contains additional fields to manage data for the
|
||||
Open Graph (Facebook) meta tags and the X / Twitter Cards.
|
||||
|
||||
Usage of these additional fields is described in the Editors Tutorial,
|
||||
`Search engine optimization (SEO) for TYPO3 editors <https://docs.typo3.org/permalink/t3editors:seo>`_.
|
||||
|
||||
.. _seo-page-dashboard:
|
||||
|
||||
A Dashboard Widget for SEO
|
||||
==========================
|
||||
|
||||
The extension also offers an additional Dashboard widget.
|
||||
:composer:`typo3/cms-dashboard` needs to be installed. Usage is described in
|
||||
the Editors Tutorial, chapter
|
||||
`Dashboard widgets for Search engine optimization (SEO) in TYPO3 <https://docs.typo3.org/permalink/t3editors:dashboard-widgets>`_.
|
||||
|
||||
If your editors have one of the standard user groups "Editor" or "Advanced Editor",
|
||||
created by the command `typo3 setup:begroups:default` they have permissions to
|
||||
use the widget.
|
||||
|
||||
If you created the use groups manually you users need to have "Dashboard" in
|
||||
their allowed modules and "Pages missing Meta Description" in the
|
||||
allowed dashboard widgets list:
|
||||
`Dashboard manual, permissions of widgets <https://docs.typo3.org/permalink/typo3/cms-dashboard:permission-handling-of-widgets>`_
|
||||
|
||||
.. _xml-sitemap:
|
||||
|
||||
XML Sitemap
|
||||
===========
|
||||
|
||||
The extension :composer:`typo3/cms-seo` comes with the site set
|
||||
`typo3/seo-sitemap <https://docs.typo3.org/permalink/typo3/cms-seo:configuration-site-sets>`_,
|
||||
which you can use to provide an XML sitemap like `https://example.org/sitemap.xml`.
|
||||
|
||||
See chapter `XML sitemap <https://docs.typo3.org/permalink/typo3/cms-seo:xmlsitemap>`_
|
||||
for details.
|
||||
|
||||
.. _canonical-url:
|
||||
|
||||
Canonical URL
|
||||
=============
|
||||
|
||||
When :composer:`typo3/cms-seo` is installed, pages automatically contain a
|
||||
canonical link tag in their HTML head, unless disabled via TypoScript.
|
||||
|
||||
.. code-block:: html
|
||||
:caption: example output of a canonical link in the head of a TYPO3 page
|
||||
|
||||
<head>
|
||||
|
||||
<!-- ... -->
|
||||
|
||||
<link rel="canonical" href="https://example.org/somepage"/>
|
||||
</head>
|
||||
|
||||
You can use the event `ModifyUrlForCanonicalTagEvent <https://docs.typo3.org/permalink/t3coreapi:modifyurlforcanonicaltagevent>`_
|
||||
to provide an alternative canonical URL if needed.
|
||||
|
||||
The API of the canonical link is described in
|
||||
`Canonical API, TYPO3 Explained <https://docs.typo3.org/permalink/t3coreapi:canonicalapi>`_.
|
||||
|
||||
.. warning::
|
||||
If you have other SEO extensions installed that generate canonical links,
|
||||
you have to make sure only one is responsible to embed into your frontend
|
||||
output.
|
||||
|
||||
If both the Core and another extension are generating a canonical link,
|
||||
it will result in 2 canonical links which might cause confusion for search
|
||||
engines.
|
||||
|
||||
.. _seo-page-title-provider:
|
||||
|
||||
SEO page title provider
|
||||
=======================
|
||||
|
||||
While the `Page title API <https://docs.typo3.org/permalink/t3coreapi:pagetitle>`_,
|
||||
providing a `<title>` tag in the HTML head is part of a minimal TYPO3 installation,
|
||||
:composer:`typo3/cms-seo` provides an additional field, `seo_title` in the page
|
||||
properties. The :php:`\TYPO3\CMS\Seo\PageTitle\SeoTitlePageTitleProvider`
|
||||
provides this title as an alternative title for the `<title>` tag.
|
||||
|
||||
The following default TypoScript setup is provided for the page title provider:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
config.pageTitleProviders {
|
||||
seo {
|
||||
provider = TYPO3\CMS\Seo\PageTitle\SeoTitlePageTitleProvider
|
||||
before = record
|
||||
}
|
||||
}
|
||||
|
||||
.. _seo-meta-tag-provider:
|
||||
|
||||
Additional meta tag handling
|
||||
============================
|
||||
|
||||
While the `MetaTag API <https://docs.typo3.org/permalink/t3coreapi:metatagapi>`_
|
||||
is part of the minimal TYPO3 Core, the meta tag providers for the description
|
||||
meta tag commonly used for search engine optimazation, and the social preview
|
||||
meta tags of Open Graph and Twitter / X are part of :composer:`typo3/cms-seo`.
|
||||
|
||||
.. _seo-hreflang:
|
||||
|
||||
Hreflang tags
|
||||
=============
|
||||
|
||||
:html:`hreflang` link-tags are added automatically for multi-language websites
|
||||
based on the one-tree principle.
|
||||
|
||||
The links are based on the site configuration and depend on translations of a page.
|
||||
|
||||
:html:`hreflang="x-default"` indicates the link of the current page in the default language.
|
||||
|
||||
The value of :html:`hreflang` is set for each language in
|
||||
:guilabel:`Sites > Setup` (see :ref:`t3coreapi:sitehandling-addingLanguages`)
|
||||
@@ -0,0 +1,243 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
.. index:: XML sitemap
|
||||
.. _xmlsitemap:
|
||||
|
||||
===========
|
||||
XML sitemap
|
||||
===========
|
||||
|
||||
:composer:`typo3/cms-seo` provides a ready to use XML sitemap that can be
|
||||
included via `Site sets <https://docs.typo3.org/permalink/typo3/cms-seo:configuration-site-sets>`_
|
||||
(recommended) or include in your TypoScript record.
|
||||
|
||||
.. versionchanged:: 14.0
|
||||
The names of the GET parameters used in the sitemap generated by EXT:seo have
|
||||
been changed from `page` and `sitemap` to `tx_seo[page]` and `tx_seo[sitemap]`
|
||||
respectively.
|
||||
|
||||
If you are overriding the :ref:`automatic routing configuration <xmlsitemap-routing>`,
|
||||
the customized routing needs to be slightly adopted.
|
||||
|
||||
If the templates of `EXT:seo/Resources/Private/Templates/XmlSitemap/Index.xml`
|
||||
have been modified, adopt the generated links to fit the original ones.
|
||||
|
||||
In case the URL to a single sitemap has been provided to a third party tool
|
||||
like a crawler, search engine, ... it must be added again with the new URL.
|
||||
|
||||
.. contents:: Table of Contents
|
||||
:depth: 1
|
||||
:local:
|
||||
|
||||
.. _xmlsitemap-url:
|
||||
|
||||
How to access your XML sitemap
|
||||
==============================
|
||||
|
||||
You can access the sitemaps by visiting `https://example.org/sitemap.xml`.
|
||||
You will first see the sitemap index. By default, there is one sitemap in the
|
||||
index. This is the sitemap for pages.
|
||||
|
||||
.. note::
|
||||
Each site root and language configured in the
|
||||
`Site handling <https://docs.typo3.org/permalink/t3coreapi:sitehandling>`_
|
||||
has its own XML sitemap depending on the entry point.
|
||||
|
||||
**Example:**
|
||||
|
||||
- Entry point `/` - :samp:`https://example.org/sitemap.xml`: for default language
|
||||
- Entry point `/fr/` - :samp:`https://example.org/fr/sitemap.xml`: for French
|
||||
- Entry point `/it/` - :samp:`https://example.org/it/sitemap.xml`: for Italian
|
||||
|
||||
.. _xmlsitemap-routing:
|
||||
|
||||
Automatic routing for the XML sitemap
|
||||
=====================================
|
||||
|
||||
.. versionchanged:: 14.1
|
||||
The SEO extension now ships its sitemap route enhancers as part of
|
||||
the `typo3/seo-sitemap` site set.
|
||||
|
||||
Previously, these route enhancers had to be manually configured in each
|
||||
site's `config.yaml`.
|
||||
|
||||
The SEO extension now ships its sitemap route enhancers as part of
|
||||
the `typo3/seo-sitemap` site set. When this set is used as a dependency,
|
||||
the route enhancers for XML sitemaps are automatically configured.
|
||||
|
||||
This enables clean URLs for sitemaps out of the box:
|
||||
|
||||
* `/sitemap.xml` - Main sitemap index
|
||||
* `/sitemap-type/pages/sitemap.xml` - Pages sitemap
|
||||
|
||||
The routing can be overridden in the projects :file:`config/sites/my-site/config.yaml`
|
||||
and in site sets extending the `typo3/seo-sitemap` site set.
|
||||
|
||||
.. index:: XmlSitemapDataProviders
|
||||
|
||||
|
||||
.. _xmlsitemap-data-providers:
|
||||
|
||||
Data providers for XML sitemaps
|
||||
===============================
|
||||
|
||||
The rendering of sitemaps is based on data providers implementing
|
||||
:php:`\TYPO3\CMS\Seo\XmlSitemap\XmlSitemapDataProviderInterface`.
|
||||
|
||||
:composer:`typo3/cms-seo` ships with the following data providers for XML
|
||||
sitemaps:
|
||||
|
||||
.. _xmlsitemap-data-providers-pages:
|
||||
|
||||
For pages: PagesXmlSitemapDataProvider
|
||||
--------------------------------------
|
||||
|
||||
The :php:`\TYPO3\CMS\Seo\XmlSitemap\PagesXmlSitemapDataProvider` will generate a
|
||||
sitemap of pages based on the detected site root. You can configure whether you
|
||||
have additional conditions for selecting the pages.
|
||||
|
||||
Via setting :ref:`seo.sitemap.pages.excludedDoktypes <typo3/cms-seo:confval-seo-settings-seo-sitemap-pages-excludeddoktypes>`
|
||||
it is possible to exclude certain `Types of pages <https://docs.typo3.org/permalink/t3coreapi:list-of-page-types>`_.
|
||||
|
||||
Additionally, you may exclude page subtrees from the sitemap
|
||||
(for example internal pages). This can be
|
||||
configured using setting
|
||||
:ref:`seo.sitemap.pages.excludePagesRecursive <typo3/cms-seo:confval-seo-settings-seo-sitemap-pages-excludepagesrecursive>`.
|
||||
|
||||
If your site still depend on TypoScript records instead of site sets, you can
|
||||
make these settings via TypoScript constants.
|
||||
|
||||
For special use cases you might want to override the default TypoScript provided
|
||||
by the set.
|
||||
|
||||
.. _xmlsitemap-data-providers-records:
|
||||
|
||||
For database records: RecordsXmlSitemapDataProvider
|
||||
---------------------------------------------------
|
||||
|
||||
If you have an extension installed and want a sitemap of those records, the
|
||||
:php:`\TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider` can be used. The
|
||||
following example shows how to add a sitemap for news records:
|
||||
|
||||
.. literalinclude:: _xmlSitemap/_record.typoscript
|
||||
:caption: EXT:my_extension/Configuration/Sets/XmlSitemapNews/setup.typoscript
|
||||
|
||||
You can add multiple sitemaps and they will be added to the sitemap index
|
||||
automatically. Use different types to have multiple, independent sitemaps:
|
||||
|
||||
.. literalinclude:: _xmlSitemap/_multiple.typoscript
|
||||
:caption: EXT:my_extension/Configuration/Sets/XmlSitemapMultiple/setup.typoscript
|
||||
|
||||
.. _xmlsitemap-changefreq-priority:
|
||||
|
||||
Change frequency and priority
|
||||
=============================
|
||||
|
||||
Change frequencies define how often each page is approximately updated and hence
|
||||
how often it should be revisited (for example: News in an archive are "never"
|
||||
updated, while your home page might get "weekly" updates).
|
||||
|
||||
Priority allows you to define how important the page is compared to other pages
|
||||
on your site. The priority is stated in a value from 0 to 1. Your most important
|
||||
pages can get an higher priority as other pages. This value does not affect how
|
||||
important your pages are compared to pages of other websites. All pages and
|
||||
records get a priority of 0.5 by default.
|
||||
|
||||
The settings can be defined in the TypoScript configuration of an XML sitemap by
|
||||
mapping the properties to fields of the record by using the options
|
||||
:typoscript:`changeFreqField` and :typoscript:`priorityField`.
|
||||
:typoscript:`changeFreqField` needs to point to a field containing string values
|
||||
(see :typoscript:`pages` TCA definition of field
|
||||
:typoscript:`sitemap_changefreq`), :typoscript:`priorityField` needs to point to
|
||||
a field with a decimal value between 0 and 1.
|
||||
|
||||
.. note::
|
||||
Both the priority and the change frequency have no impact on your rankings.
|
||||
These options only give hints to search engines in which order and how often
|
||||
you would like a crawler to visit your pages.
|
||||
|
||||
.. _xmlsitemap-without-sorting:
|
||||
|
||||
Sitemap of records without sorting field
|
||||
========================================
|
||||
|
||||
Sitemaps are paginated by default. To ensure that as few pages of the sitemap
|
||||
as possible are changed after the number of records is changed, the items in the
|
||||
sitemaps are ordered. By default, this is done using a sorting field. If you do
|
||||
not have such a field, make sure to configure this in your sitemap configuration
|
||||
and use a different field. An example you can use for sorting based on the uid
|
||||
field:
|
||||
|
||||
.. literalinclude:: _xmlSitemap/_recordUnsorted.typoscript
|
||||
:caption: EXT:my_extension/Configuration/Sets/XmlSitemapTableWithoutSorting/setup.typoscript
|
||||
|
||||
.. _xmlsitemap-custom-provider:
|
||||
|
||||
Create a custom XML sitemap provider
|
||||
====================================
|
||||
|
||||
If you need more logic in your sitemap, you can also write your own
|
||||
sitemap provider. You can do this by extending the
|
||||
:php:`\TYPO3\CMS\Seo\XmlSitemap\AbstractXmlSitemapDataProvider` class or
|
||||
implementing :php:`\TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider`.
|
||||
|
||||
The main methods of interest are :php:`getLastModified()` and :php:`getItems()`.
|
||||
|
||||
The :php:`getLastModified()` method is used in the sitemap index and has to
|
||||
return the date of the last modified item in the sitemap.
|
||||
|
||||
The :php:`getItems()` method has to return an array with the items for the
|
||||
sitemap:
|
||||
|
||||
.. code-block:: php
|
||||
:caption: EXT:my_extension/Classes/XmlSitemap/MyXmlSitemapProvider.php
|
||||
|
||||
$this->items[] = [
|
||||
'loc' => 'https://example.org/page1.html',
|
||||
'lastMod' => '1536003609'
|
||||
];
|
||||
|
||||
The :php:`loc` element is the URL of the page to be crawled by a search engine.
|
||||
The :php:`lastMod` element contains the date of the last update of the
|
||||
specific item. This value is a UNIX timestamp. In addition, you can include
|
||||
:php:`changefreq` and :php:`priority` as keys in the array to give
|
||||
:ref:`search engines a hint <xmlsitemap-changefreq-priority>`.
|
||||
|
||||
.. _sitemap-xslFile:
|
||||
|
||||
Use a customized sitemap XSL file
|
||||
=================================
|
||||
|
||||
The XSL file used to create a layout for an XML sitemap can be configured at
|
||||
three levels:
|
||||
|
||||
#. For all sitemaps:
|
||||
|
||||
.. code-block:: typoscript
|
||||
:caption: EXT:my_extension/Configuration/TypoScript/setup.typoscript
|
||||
|
||||
plugin.tx_seo.config {
|
||||
xslFile = EXT:my_extension/Resources/Public/CSS/mySite.xsl
|
||||
}
|
||||
|
||||
#. For all sitemaps of a certain sitemapType:
|
||||
|
||||
.. code-block:: typoscript
|
||||
:caption: EXT:my_extension/Configuration/TypoScript/setup.typoscript
|
||||
|
||||
plugin.tx_seo.config.mySitemapType.sitemaps {
|
||||
xslFile = EXT:my_extension/Resources/Public/CSS/mySite.xsl
|
||||
}
|
||||
|
||||
#. For a specific sitemap:
|
||||
|
||||
.. code-block:: typoscript
|
||||
:caption: EXT:my_extension/Configuration/TypoScript/setup.typoscript
|
||||
|
||||
plugin.tx_seo.config.xmlSitemap.sitemaps.myNewsSitemap.config {
|
||||
xslFile = EXT:my_extension/Resources/Public/CSS/mySite.xsl
|
||||
}
|
||||
|
||||
The value is inherited until it is overwritten.
|
||||
|
||||
If no value is specified at all, :file:`EXT:seo/Resources/Public/CSS/Sitemap.xsl`
|
||||
is used as default.
|
||||
@@ -0,0 +1,18 @@
|
||||
routeEnhancers:
|
||||
PageTypeSuffix:
|
||||
type: PageType
|
||||
map:
|
||||
/: 0
|
||||
sitemap.xml: 1533906435
|
||||
Sitemap:
|
||||
type: Simple
|
||||
routePath: 'sitemap-type/{sitemap}'
|
||||
aspects:
|
||||
sitemap:
|
||||
type: StaticValueMapper
|
||||
map:
|
||||
pages: pages
|
||||
tx_news: tx_news
|
||||
my_other_sitemap: my_other_sitemap
|
||||
_arguments:
|
||||
sitemap: 'tx_seo/sitemap'
|
||||
@@ -0,0 +1,30 @@
|
||||
seo_googlenews < seo_sitemap
|
||||
seo_googlenews.typeNum = 1571859552
|
||||
seo_googlenews.10.sitemapType = googleNewsSitemap
|
||||
|
||||
plugin.tx_seo {
|
||||
config {
|
||||
xmlSitemap {
|
||||
sitemaps {
|
||||
news {
|
||||
provider = GeorgRinger\News\Seo\NewsXmlSitemapDataProvider
|
||||
config {
|
||||
# ...
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
googleNewsSitemap {
|
||||
sitemaps {
|
||||
news {
|
||||
provider = GeorgRinger\News\Seo\NewsXmlSitemapDataProvider
|
||||
config {
|
||||
googleNews = 1
|
||||
# ...
|
||||
template = GoogleNewsXmlSitemap.xml
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
plugin.tx_seo {
|
||||
config {
|
||||
xmlSitemap {
|
||||
sitemaps {
|
||||
myNewsSitemap {
|
||||
provider = TYPO3\CMS\Seo\XmlSitemap\RecordsXmlSitemapDataProvider
|
||||
config {
|
||||
table = news_table
|
||||
sortField = sorting
|
||||
lastModifiedField = tstamp
|
||||
changeFreqField = news_changefreq
|
||||
priorityField = news_priority
|
||||
additionalWhere = AND ({#no_index} = 0 OR {#no_follow} = 0)
|
||||
pid = <page id('s) containing news records>
|
||||
recursive = <number of subpage levels taken into account beyond the pid page. (default: 0)>
|
||||
url {
|
||||
pageId = <your detail page id>
|
||||
fieldToParameterMap {
|
||||
uid = tx_extension_pi1[news]
|
||||
}
|
||||
additionalGetParameters {
|
||||
tx_extension_pi1.controller = News
|
||||
tx_extension_pi1.action = detail
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
plugin.tx_seo {
|
||||
config {
|
||||
xmlSitemap {
|
||||
sitemaps {
|
||||
myUnsortedTable {
|
||||
config {
|
||||
sortField = uid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user