注意:这与网站地图的工作方式或网站地图结构的外观无关,也不是SEO相关的问题。
我的域mysite.com和mysite.pt是同一网站的两个语言版本(EN、pt(。内容是通过数据库驱动的CMS动态添加/删除的。
每个菜单/类别更新都会创建其特定于语言的路由,例如:mysite.com/beach和mysite.pt/praia,其中两者都创建指向同一控制器的路由,如site_manager/page/beaches
。
每个语言版本的代码库都是相同的,因此所有语言版本只有一个/application、/assets和/system文件夹。语言特定内容通过<?=$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文件会更改系统和应用程序文件夹的位置:
$system_path = '/home/my_host/public_html/all_sites/system';
$application_folder = '/home/my_host/public_html/all_sites/application';
此设置工作顺利。但CMS是旧的,每当菜单或内容发生变化时都不会创建更新的网站地图。
因此,我考虑了另一种方式来提供更新的站点/语言特定的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也是如此。
我如何让机器人访问控制器方法,从而读取生成的输出?
Bot正在站点的根目录中查找sitemap.xml
。
要使机器人程序"读取"控制器的回显输出,需要将其定向到控制器函数,在我们的例子中是site_manager/sitemap()
。
诀窍是使.htaccess重定向到创建站点地图输出的控制器,注意在routes.php:中site_manager
被设置为默认控制器
将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文件,因为这个文件从未被写入或上传。
你也可以通过谷歌、bing等市长目录列表的搜索控制台进行验证,并确认绕过机器人是否成功提交了网站地图