我正在使用codeigniter(mvc)和php开发webapp。我想知道当我的联系人是动态的时候如何为搜索引擎创建站点地图?是否有最佳实践,或者有没有办法实现流程自动化?我问,因为内容将不断快速添加,所以我希望站点地图是最新的。感谢
更新,以帮助回答我的问题,我创建的网站类型是一个公共博客类型的网站,用户发布文章。
Update2 :只是详细说明我的困惑:我可能无法准确理解网站地图的结构。例如,在像stackoverflow这样的网站上,当用户添加新问题(从而创建新页面)时,站点地图是否会更改并需要重新提交?像这样的网站甚至有一个站点地图有多重要?
答案 0 :(得分:5)
即使您的内容是动态的,您也希望自己的站点地图是静态的。 当然,如果您愿意,每天更新一次站点地图,或者每当您发布新博客条目时更新它...但不要尝试在请求时创建它。那将是一场表演的噩梦。
我认为Stackoverflow的站点地图每天都会更新。它包含最近更改的50,000个页面。站点地图有助于SEO(搜索引擎优化)。
生成站点地图的配方over here
答案 1 :(得分:2)
除了我在Zend Framework和Doctrine中开发而不是Code Igniter之外,我和你的情况类似。
我们解决此问题的方法是构建一个充当Doctrine嵌套集的Sitemap模型。它基本上只是一些字段,如id,parent_id,title,uri,created,updated。如果需要,您可以添加更多字段,但这是基本前提。
然后我们使用Zend_Navigation将此树渲染到网站的菜单中。
Zend_Navigation还有一个自动生成XML站点地图的辅助方法,所以我们有一个控制器和视图,用于渲染该XML文档。
然后我们编写了一个Zend Action Controller插件,它监视站点地图控制器,当进行更新时,它会检查上次更新,并向Google发出站点地图已更新的信息。
我想,所有这些概念都可以很容易地移植到CI中。
如果CI中没有站点地图视图助手,您可以使用Zend Navigation类,因为Zend松散地分离。
或者您可以使用CI生成带有CI的xml文档,使用此处的站点地图标准。
答案 2 :(得分:2)
假设你正在尝试创建一个xml站点地图,而不是在html一个?
我还没有这样做,想尽快尝试一下,但我要做的是:设置一个调用example.com/index.php/sitemap之类路径的cron作业。然后,站点地图控制器中的索引功能将运行查询,以选择所有帖子的所有标题+构建这些条目的完整URL所需的一切,因为它是站点地址协议中的必需元素,当条目上次更新时。如果您的数据库中没有字段,则可能需要添加它。
然后它只是循环结果并写出具有适当结构的xml文件。当你循环时,你还必须根据每个条目决定优先级,changefreq和所有其他元素。
我一直在看http://www.xml-sitemaps.com/的付费版本,除了为你设置cron之外,它应该做的一切,价格相当不错并在你自己的服务器上运行。我不认为你可以自己开发这个19,99美元的时间。而且,这个应用程序还通知搜索引擎新内容,这是我上面没有概述的方法。
答案 3 :(得分:0)
根据您创建的网站类型,您可以通过多种方式进行讨论
例如,如果您正在制作新闻网站。你可以有一个页面链接到每篇新闻文章的永久链接。如果您可以详细说明哪种网站/其内容,我们可以提供更好的帮助。
答案 4 :(得分:0)
站点地图结构中的update-frequency参数告诉搜索引擎网页更新的频率。
不要对页面的URL感到困惑,因为它可以通过多种方法进行更改。
对于stackoverflow,此页面可能为questions.php?id=1317539
,例如,对于questions.php,更新频率设置为一分钟
所以每分钟都会为stackoverflow网站生成一个新的站点地图。
更新:Robert This answer解释了当向系统添加新问题时Stack Overflow的站点地图会发生什么。
答案 5 :(得分:0)
最佳解决方案是在.htaccess
RewriteEngine On
文件中
RewriteRule ^sitemap\.xml$ sitemap.php [L]
然后只需在根文件夹中有一个文件sitemap.php
,该文件通常可以通过http://yoursite.com/sitemap.xml
访问,sitemap.php
是所有搜索引擎首先搜索的默认网址。
文件<?php header('Content-type: application/xml; charset=utf-8') ?>
<?php echo '<?xml version="1.0" encoding="UTF-8"?>' ?>
<?include_once('./myVariables.php'); ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc><?php echo $URL1; ?></loc>
<lastmod>2005-01-01</lastmod>
<changefreq>monthly</changefreq>
</url>
<url>
<loc><?php echo $URL2; ?></loc>
<lastmod>2005-01-01</lastmod>
<changefreq>monthly</changefreq>
</url>
</urlset>
应该是这样的
graphql
它有效:)