以编程方式即时为多语言/多域站点创建 sitemap.xml
Create a sitemap.xml programmatically for a multi-language / multi-domain site on the fly
注意:这与站点地图的工作原理或站点地图结构的外观无关,也不是与 SEO 相关的问题。
我的域名 mysite.com 和 mysite.pt 是同一个域名的两个语言版本(EN、PT)地点。
内容是通过数据库驱动的 CMS 动态 added/removed。
每个 menu/category 更新都会创建其特定于语言的路由,例如:mysite.com/beach 和 mysite.pt/praia ,两者都创建指向同一控制器的路由,例如site_manager/page/beaches
.
每个语言版本的代码库都是相同的,因此所有语言版本只有一个 /application、/assets 和 /system 文件夹。
language specific content 通过 <?=$this->lang->line('my_token1')?>
加载
文件系统如下所示:
/public_html
/mysite.com/index.php
/mysite.pt/index.php
/all_sites/application
/all_sites/assets
/all_sites/system
两个站点路由目录中的index.php文件changes system and application folder location:
$system_path = '/home/my_host/public_html/all_sites/system';
$application_folder = '/home/my_host/public_html/all_sites/application';
此设置工作顺利。
但是 CMS 很旧,并且在菜单或内容更改时不会创建更新的站点地图。
所以我想到了另一种方法来提供更新的 site/language-specific sitemap.xml
:
当机器人来扫描站点时,可以即时创建站点地图并为机器人提供最新的 sitemap.xml
我通过创建一个控制器方法 site_manager/sitemap()
来解决这个问题,该方法解析数据库条目并输出带有 echo $this->load->view('sitemap',$data,true);
的站点地图
哪个输出,取决于站点:
<!-- created by mysite.pt, 2020-12-22 -->
<url>
<loc>https:// mysite.pt/</loc>
<lastmod>2020-12-22T20:53:36+00:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https:// mysite.pt/praias.html</loc>
<lastmod>2020-12-22T19:51:51+00:00</lastmod>
<priority>0.80</priority>
</url>
或
<!-- created by mysite.com, 2020-12-22 -->
<url>
<loc>https:// mysite.com/</loc>
<lastmod>2020-12-22T20:53:36+00:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https:// mysite.com/beaches.html</loc>
<lastmod>2020-12-22T19:51:51+00:00</lastmod>
<priority>0.80</priority>
</url>
问题:
这个设置的问题是我不会在根目录中有任何 sitemap.xml,因为只有一个回显输出,一旦使用了控制器功能。机器人将空手而归,因为找不到任何 sitemap.xml,如果您键入 mysite.com/sitemap.xml.
也是如此
如何让机器人访问控制器方法并读取生成的输出?
机器人正在寻找网站根目录中的 sitemap.xml
。
要让机器人“读取”控制器的回显输出,需要将其定向到控制器功能,在我们的例子中是 site_manager/sitemap()
。
诀窍是将 .htaccess 重定向到创建站点地图输出的控制器,请注意 site_manager
在 routes.php 中设置为默认控制器:
重定向 sitemap.xml 到 sitemap.php
RewriteRule ^sitemap\.xml$ sitemap.php [L]
这意味着试图读取“不存在的 sitemap.xml”的机器人被重定向到控制器并通过 echo $this->load->view('sitemap',$data,true);
馈送
动态站点地图数据的输出,尽可能获得最新的站点地图 xml 数据。
您可以测试站点地图创建是否成功,例如键入https://mysite.pt/sitemap.xml
在您的浏览器中:
注意:您不会在 ftp://mysite.pt
的 ftp 目录列表中找到上面创建的 sitemap.xml 文件! ,因为此文件从未被写入或上传。
您还可以通过 google、bing 等主要目录列表的搜索控制台进行验证,并确认绕过机器人是否成功提交了站点地图
注意:这与站点地图的工作原理或站点地图结构的外观无关,也不是与 SEO 相关的问题。
我的域名 mysite.com 和 mysite.pt 是同一个域名的两个语言版本(EN、PT)地点。 内容是通过数据库驱动的 CMS 动态 added/removed。
每个 menu/category 更新都会创建其特定于语言的路由,例如:mysite.com/beach 和 mysite.pt/praia ,两者都创建指向同一控制器的路由,例如site_manager/page/beaches
.
每个语言版本的代码库都是相同的,因此所有语言版本只有一个 /application、/assets 和 /system 文件夹。
language specific content 通过 <?=$this->lang->line('my_token1')?>
文件系统如下所示:
/public_html
/mysite.com/index.php
/mysite.pt/index.php
/all_sites/application
/all_sites/assets
/all_sites/system
两个站点路由目录中的index.php文件changes system and application folder location:
$system_path = '/home/my_host/public_html/all_sites/system';
$application_folder = '/home/my_host/public_html/all_sites/application';
此设置工作顺利。 但是 CMS 很旧,并且在菜单或内容更改时不会创建更新的站点地图。
所以我想到了另一种方法来提供更新的 site/language-specific sitemap.xml
:
当机器人来扫描站点时,可以即时创建站点地图并为机器人提供最新的 sitemap.xml
我通过创建一个控制器方法 site_manager/sitemap()
来解决这个问题,该方法解析数据库条目并输出带有 echo $this->load->view('sitemap',$data,true);
哪个输出,取决于站点:
<!-- created by mysite.pt, 2020-12-22 -->
<url>
<loc>https:// mysite.pt/</loc>
<lastmod>2020-12-22T20:53:36+00:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https:// mysite.pt/praias.html</loc>
<lastmod>2020-12-22T19:51:51+00:00</lastmod>
<priority>0.80</priority>
</url>
或
<!-- created by mysite.com, 2020-12-22 -->
<url>
<loc>https:// mysite.com/</loc>
<lastmod>2020-12-22T20:53:36+00:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https:// mysite.com/beaches.html</loc>
<lastmod>2020-12-22T19:51:51+00:00</lastmod>
<priority>0.80</priority>
</url>
问题: 这个设置的问题是我不会在根目录中有任何 sitemap.xml,因为只有一个回显输出,一旦使用了控制器功能。机器人将空手而归,因为找不到任何 sitemap.xml,如果您键入 mysite.com/sitemap.xml.
也是如此如何让机器人访问控制器方法并读取生成的输出?
机器人正在寻找网站根目录中的 sitemap.xml
。
要让机器人“读取”控制器的回显输出,需要将其定向到控制器功能,在我们的例子中是 site_manager/sitemap()
。
诀窍是将 .htaccess 重定向到创建站点地图输出的控制器,请注意 site_manager
在 routes.php 中设置为默认控制器:
重定向 sitemap.xml 到 sitemap.php
RewriteRule ^sitemap\.xml$ sitemap.php [L]
这意味着试图读取“不存在的 sitemap.xml”的机器人被重定向到控制器并通过 echo $this->load->view('sitemap',$data,true);
馈送
动态站点地图数据的输出,尽可能获得最新的站点地图 xml 数据。
您可以测试站点地图创建是否成功,例如键入https://mysite.pt/sitemap.xml
在您的浏览器中:
注意:您不会在 ftp://mysite.pt
的 ftp 目录列表中找到上面创建的 sitemap.xml 文件! ,因为此文件从未被写入或上传。
您还可以通过 google、bing 等主要目录列表的搜索控制台进行验证,并确认绕过机器人是否成功提交了站点地图