Magento2如何生成sitemap文件
站点地图是网站上所有URL的结构化列表,并带有其参数列表。站点地图的主要功能是使搜索引擎更容易理解和索引您的网站内容。网站站点地图也是一种有用的工具,以确保确保Googlebot能够看到您网站上的所有内容。幸运的是,大多数CMS系统都会生成一个。
最多有六种不同类型的站点地图,但是在本文中,我们将重点介绍两种最常见且被认为是最常用的站点地图格式:HTML和XML。
目录:
什么是HTML网站地图?
什么是XML网站地图?
HTML和XML网站地图有什么区别?
如何在Magento中创建站点地图XML?
如何向Google提交站点地图?
如何为自定义模型生成站点地图?
什么是HTML网站地图?
简单来说,HTML网站地图是一页上网站导航的轮廓文本版本。这种类型的站点地图对于任何类型的网站都是必不可少的,无论是电子商务网站,非营利性网站,博客网站还是娱乐网站。HTML网站地图的重要功能是使某些用户可以更轻松地浏览网站,因为他们可能需要的所有资源都可以快速访问。这就是为什么创建并保持用户友好的站点地图很重要的原因。如果它易于导航,快速加载并且结构整洁,那么您的网站的访问者可以轻松使用它。
根据HTML网站地图的最佳做法,它应具有链接到您网站上每个页面的锚链接。它将帮助用户浏览网站,并最终使其搜索引擎可爬行。读取站点地图后,搜索引擎将了解站点上的每个页面,包括大多数搜索引擎不断运行的,无法通过正常爬网过程轻易发现的所有URL。
HTML网站地图的重要性
HTML网站地图的最大好处是,它是清晰了解网站及其所有页面的好方法。这使站点地图成为可靠的导航工具,可随时在网站页脚使用。在大多数情况下,提供适当的HTML网站地图将改善用户体验,从而对您网站的排名产生影响。
此外,为了提升您的在线形象,这种类型的站点地图非常有价值,因为它是搜索引擎将阅读的页面,以了解您的网站并在其中建立索引。当网站上的信息是新的并且没有太多链接时,或者某些文章包含很多内容而链接不正确时,搜索引擎优化对具有动态内容的网站特别有用。
什么是XML网站地图?
XML网站地图是一个文本文件,用于详细说明网站上的所有URL。它可以在每个URL上包含额外的数据,包括解决其最新更新,其优先级,发生平均频率变化的信息,与站点其余部分的URL关系其余部分的关系以及是否有其他语言版本的相同URL。根据Google文档,XML站点地图对于具有大量存档或大量媒体内容的网站很有用,尽管我们认为,即使您的网络商店不符合这些特征,拥有站点地图仍将在很大程度上受益。
站点地图协议格式包含XML标签,并且应:
- 以<urlset>开头标记开始,以</ urlset>结束标记结束。
- 包括URL的<url>项作为父XML标记。
- 在<urlset>标记内指定名称空间(协议标准)。
- 包括<url>父标记的<loc>子条目。
其他标签是可选的,它们的支持可能因搜索引擎而异。因此,在包含任何这些可选标记之前,请查阅每个搜索引擎的文档。
为什么XML网站地图对SEO很重要?
创建站点地图对于SEO尤其有用。XML站点地图是为搜索漫游器设计的,更新的XML文件可用于对搜索引擎执行ping操作,并向它们发出更改和更新警报。XML文档使搜索引擎知道有新鲜的新内容。拥有完善的XML网站地图,可以极大地增加您的网页被搜索引擎抓取和编制索引的机会,尤其是在网站的导航系统无法正常工作或常规内部链接策略无法提供与所有您的页面。
如果您的网站是国际网站或将同一页面翻译成不同语言的网站,则可以使用XML网站地图来对搜索引擎的内容进行排序。该站点地图将能够告知抓取工具该页面具有多个版本,并且他们将使用此信息来确保根据用户的语言或位置向他们提供正确的网站版本。
HTML和XML网站地图有什么区别?
由于本文针对两个站点地图,因此必须清楚地了解它们之间的区别,这一点很重要。因此,本段专门讨论HTML网站地图与XML网站地图的比较。
HTML和XML网站地图在搜索引擎优化方面有不同的用途和价值。HTML和XML站点地图之间的主要区别在于,HTML站点地图主要是为用户编写的,是帮助他们全面了解网站的最主要工具,而XML站点地图则首先是为搜索引擎编写的。
HTML站点地图是网站,页面和信息的一般概述,可能对用户有用。虽然主要由网站的访问者使用,但它也可以帮助搜索引擎排名。
简而言之,主要创建XML来促进搜索引擎的功能,为搜索引擎提供有关网站结构的所有必要信息。
如何在Magento中创建站点地图XML?
您将在下面找到有关如何在Magento后台建立站点地图的清晰的分步说明。
第1步:导航至Stores->Settings->Configuration。
步骤2:在“Catalog”选项中,选择“XML Sitemap”。
请记住,根据任务,可以针对默认配置以及网站或商店视图执行这些设置。
步骤#3:在“Categories Options”,“ Products Options”和“CMS Pages Options”部分中配置类别,产品和CMS页面的更新频率和优先级。
在大多数情况下,这些部分中的默认值是首选值,但如果您需要引入一些自定义更改,以下是必须修改的字段。
以下值可用于频率设置:
- Always
- Hourly
- Daily
- Weekly
- Monthly
- Yearly
- Never
频率值针对搜索引擎爬虫程序,并设置爬虫程序访问该页面的频率。建议将每次访问时更改的页面设置为Always。Never值应应用于已存档的页面;这样,搜索引擎爬虫将很少访问它们,以跟踪无法预料的变化(如果有的话)。但是,爬虫程序可能会忽略您设置的值,并更频繁地访问具有“Weekly”值的页面,而不是具有“Hourly”值的页面。
优先级值设置为0到1,其中1是最高优先级。
使用优先级设置,您可以指定哪些页面最重要,哪些页面不那么重要。因此,为所有页面设置1优先级是没有用的,因为所有页面都同样重要。对于“Priority”,默认值为0.5,这是大多数情况下的建议值。
另外,在“Add Images to Sitemap”字段中设置所需的站点地图图像–无,仅基础或全部。
完成后,按Save Config。
步骤#4:设置站点地图生成设置。
展开“ Generation Settings”部分并配置以下内容:
- Enabled-启用站点地图生成,因此设置为“Yes”。
- Start Time–启动站点地图生成的服务器时间。最好的时间是晚上,当负载最小时,
- Frequency-网站地图更新的频率。最好的方法是将值设置为等于商店中产品添加或更改的频率。
- Error Email Recipient-有关生成站点地图错误的消息将被发送到的电子邮件地址。
- Error Email Sender–发送有关站点地图生成错误的消息的电子邮件地址。可用选项包括General Contact, Sales representative, Customer support, Custom email。
要为这些字段设置电子邮件地址,请导航至Stores->Configuration-> General->Store Email Addresses。
Magento设置允许为整个网站或单独的商店定义它们。
Error Email Template–将用于生成站点地图通知的消息模板。
步骤#5:定义站点地图文件限制
展开Sitemap File Limits部分,并填写以下字段:
- Maximum No of URLs Per File-限制添加到网站的URL数。
- Maximum File Size–限制文件大小。
步骤#6:定义将站点地图添加到robots.txt中的规则
展开“Search Engine Submission Settings”部分,然后将“Enable Submission”字段设置为“Yes”。此配置将站点地图链接添加到robots.txt文件中,爬虫程序使用该文件来获取网站索引规则。
步骤#7:按“Save Config”并刷新配置缓存以启用您所做的更改。
步骤#8:要设置站点地图生成,请导航至Marketing->SEO & Search->Sitemap。
步骤#9:按右上角的Add Sitemap按钮。
步骤#10:输入Filename和Path值。
通常,sitemap.xml用作文件名,而路径设置为正斜杠。请记住,创建站点地图文件的目录必须是可写的。
步骤#11:按“Save”或“Save & Generate”按钮。
如果按Save,则地图将在设置日期和时间自动生成。否则,如果按“Save & Generate”,则将立即生成站点地图。
如果您的Magento商店中有大量产品,则第一种选择更可取,您可以将生成时间安排在商店负荷最小的时候。
如何向Google提交站点地图?
可以通过Google Search Console来将XML网站地图提交给Google,不需要特别的知识。以下是一个简单的分步指南,将指导您完成此过程。
注意!在向Google添加站点地图之前,必须先在Google Search Console中确认其对网站的权利。
步骤1:转到Google Search Console工具,然后输入网站的地址。
步骤2:在左侧栏中选择Sitemap。
步骤#3:在相应的输入行中输入不带域名地址的XML网站地图URL(在屏幕截图中标记为2)。通常,地址是站点URL + sitemap.xml,但是可以肯定的是,您可以签入Magento站点地图生成设置。
步骤4:按Submit(提交)按钮。
站点地图将添加到web爬虫程序队列中。您可以在下面提交的站点地图部分中跟踪其站点地图提交的进度。
如果出现以下警告–“Your sitemap appears to be an HTML page. Please use a supported sitemap format instead” –在Google提交站点地图时出现,然后您需要检查在第3步中提交的站点地图URL是否正确。
如何为自定义模型生成站点地图?
通过将新的ItemProvider添加到\Magento\Sitemap\Model\ItemProvider\Composite中,可以从自定义模型添加URL。
以下是将CMS页面添加到站点地图中的示例。尽管CMS页面默认包含在XML网站地图中,但是我们的示例演示了如何添加任何模型:
app/code/VendorName/Sitemap/etc/module.xml
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="VendorName_Sitemap" > <sequence> <module name="Magento_Sitemap"/> </sequence> </module> </config>
app/code/VendorName/Sitemap/etc/di.xml
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <!-- Types --> <type name="Magento\Sitemap\Model\ItemProvider\Composite"> <arguments> <argument name="itemProviders" xsi:type="array"> <item name="examplePagesProvider" xsi:type="object"> VendorName\Sitemap\Model\ItemProvider\ExamplePages </item> </argument> </arguments> </type> <type name="VendorName\Sitemap\Model\ItemProvider\ExamplePages"> <arguments> <argument name="configReader" xsi:type="object"> VendorName\Sitemap\Model\ItemProvider\ExamplePagesConfigReader </argument> </arguments> </type> </config>
app/code/VendorName/Sitemap/etc/adminhtml/system.xml
<?xml version="1.0" encoding="UTF-8"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <section id="sitemap"> <group id="example_pages" translate="label" type="text" sortOrder="0" showInDefault="1" showInWebsite="1" showInStore="1"> <label> <![CDATA[Example Pages Options]]> </label> <field id="changefreq" translate="label" type="select" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label> <![CDATA[Frequency]]> </label> <source_model>Magento\Sitemap\Model\Config\Source\Frequency</source_model> </field> <field id="priority" translate="label comment" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1"> <label> <![CDATA[Priority]]> </label> <comment> <![CDATA[Valid values range from 0.0 to 1.0.]]> </comment> <backend_model>Magento\Sitemap\Model\Config\Backend\Priority</backend_model> </field> </group> </section> </system> </config>
app/code/VendorName/Sitemap/Model/ItemProvider/ExamplePages.php
<?php namespace VendorName\Sitemap\Model\ItemProvider; use Magento\Framework\Exception\NoSuchEntityException; use Magento\Sitemap\Model\ItemProvider\ItemProviderInterface; use Magento\Sitemap\Model\SitemapItemFactory; /** * Class ExamplePages * @package VendorName\Sitemap\Model\ItemProvider */ class ExamplePages implements ItemProviderInterface { /** * @var ExamplePagesConfigReader */ private $configReader; /** * @var SitemapItemFactory */ private $itemFactory; /** * @var \Magento\Cms\Api\PageRepositoryInterface */ private $pageRepositoryInterface; /** * @var \Magento\Framework\Api\SearchCriteriaBuilder */ private $searchCriteriaBuilder; /** * @var array */ protected $sitemapItems = []; /** * ExamplePages constructor. * @param ExamplePagesConfigReader $configReader * @param SitemapItemFactory $itemFactory * @param \Magento\Cms\Api\PageRepositoryInterface $pageRepositoryInterface * @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder */ public function __construct( ExamplePagesConfigReader $configReader, SitemapItemFactory $itemFactory, // CMS pages will be used as an example \Magento\Cms\Api\PageRepositoryInterface $pageRepositoryInterface, \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder ) { $this->configReader = $configReader; $this->itemFactory = $itemFactory; $this->pageRepositoryInterface = $pageRepositoryInterface; $this->searchCriteriaBuilder = $searchCriteriaBuilder; } /** * @param int $storeId * @return array * @throws NoSuchEntityException */ public function getItems($storeId): array { // CMS pages will be used as an example $searchCriteria = $searchCriteria = $this->searchCriteriaBuilder->create(); $pages = $this->pageRepositoryInterface->getList($searchCriteria)->getItems(); foreach ($pages as $page) { $this->sitemapItems[] = $this->itemFactory->create( [ 'url' => $page->getIdentifier(), 'updatedAt' => $page->getUpdateTime(), 'priority' => $this->getPriority($storeId), 'changeFrequency' => $this->getChangeFrequency($storeId) ] ); } return $this->sitemapItems; } /** * @param int $storeId * * @return string * */ private function getChangeFrequency(int $storeId): string { return $this->configReader->getChangeFrequency($storeId); } /** * @param int $storeId * * @return string * */ private function getPriority(int $storeId): string { return $this->configReader->getPriority($storeId); } }
app/code/VendorName/Sitemap/Model/ItemProvider/ExamplePagesConfigReader.php
<?php namespace VendorName\Sitemap\Model\ItemProvider; use Magento\Sitemap\Model\ItemProvider\ConfigReaderInterface;; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Store\Model\ScopeInterface; /** * Class ExamplePagesConfigReader * @package VendorName\Sitemap\Model\ItemProvider */ class ExamplePagesConfigReader implements ConfigReaderInterface { const XML_PATH_CHANGE_FREQUENCY = 'sitemap/example_pages/changefreq'; const XML_PATH_PRIORITY = 'sitemap/example_pages/priority'; /** * @var ScopeConfigInterface */ private $scopeConfig; /** * @param ScopeConfigInterface $scopeConfig * */ public function __construct(ScopeConfigInterface $scopeConfig) { $this->scopeConfig = $scopeConfig; } /** * @param int $storeId * @return string */ public function getPriority($storeId): string { $storeId = (int)$storeId; return $this->getConfigValue(self::XML_PATH_PRIORITY, $storeId); } /** * @param int $storeId * @return string */ public function getChangeFrequency($storeId): string { $storeId = (int)$storeId; return $this->getConfigValue(self::XML_PATH_CHANGE_FREQUENCY, $storeId); } /** * @param string $configPath * @param int $storeId * * @return string * */ private function getConfigValue(string $configPath, int $storeId): string { $configValue = $this->scopeConfig->getValue( $configPath, ScopeInterface::SCOPE_STORE, $storeId ); return (string)$configValue; } }
总结
如您所见,有两种主要的站点地图类型-XML和HTML。它们提供不同的功能-一种用于搜索引擎,另一种用于用户体验和搜索优化。按照上面提供的详细分步说明,您可以自行创建必要的站点地图,但是如果您需要支持,可以转到“技术支持”,我们将解决您可能遇到的任何问题,并为您提供优质的Magento开发解决方案。