【问题标题】:Sitemap for dynamic content?动态内容的站点地图?
【发布时间】:2009-08-23 01:52:47
【问题描述】:

我正在使用 codeigniter (mvc) 和 php 开发一个 webapp。我想知道当我的联系人是动态的时如何为搜索引擎创建站点地图?是否有这方面的最佳实践,或者有没有办法自动化这个过程?我问是因为内容会不断快速添加,所以我希望站点地图是最新的。谢谢

更新:为了帮助回答我的问题,我正在创建的网站类型是用户发布文章的公共博客类型网站。

Update2:只是为了详细说明我的困惑:我可能不完全了解站点地图的结构。例如,在像 stackoverflow 这样的网站上,当用户添加新问题(因此,创建新页面)时,站点地图是否会更改并需要重新提交?对于像这样的网站来说,拥有站点地图有多重要?

【问题讨论】:

    标签: php codeigniter search-engine sitemap


    【解决方案1】:

    即使您的内容是动态的,您也希望站点地图是静态的。 当然,如果您愿意,可以每天更新一次站点地图,或者在您发布新博客条目时更新它……但不要尝试在请求时创建它。这将是一场性能噩梦。

    我认为 Stackoverflow 的站点地图每天都会更新。它包含 50,000 个最近更改的页面。站点地图有助于 SEO(搜索引擎优化)。

    站点地图生成方法over here

    【讨论】:

      【解决方案2】:

      我的情况和你类似,只是我用 Zend Framework 和 Doctrine 开发而不是 Code Igniter。

      我们解决此问题的方法是构建一个站点地图模型,该模型充当 Doctrine Nested Set。它基本上只是几个字段,如 id、parent_id、title、uri、created、updated。如果需要,您可以添加更多字段,但这是基本前提。

      然后我们使用 Zend_Navigation 将此树渲染到站点的菜单中。

      Zend_Navigation 也有一个自动生成 XML 站点地图的辅助方法,所以我们有一个控制器和视图来设置来呈现那个 XML 文档。

      然后我们编写了一个 Zend Action Controller 插件,它监控站点地图控制器,当进行更新时,它会检查上次更新,并 ping Google 网站地图已更新。

      我想,所有这些概念都可以很容易地移植到 CI 中。

      如果 CI 中没有站点地图视图助手,您可能可以使用 Zend Navigation 类,因为 Zend 是松散解耦的。

      或者您可以使用 CI 生成 xml 文档,使用此处的站点地图标准。

      http://www.sitemaps.org/protocol.php

      【讨论】:

      • 您是将站点地图写入文件还是仅缓存它们? To u 列出所有 url 还是只列出最重要的一次?你如何 ping 谷歌?
      • 嗨,曼努埃尔。您可以逐步构建站点地图。从最重要的开始,随着时间的推移继续添加。您可能希望缓存到文件。您可以通过向 www.google.com/webmasters/tools/ping?sitemap=sitemap_url 发送 HTTP 请求并将 sitemap_url 替换为站点地图 URL 的 url 编码版本来 ping google。
      【解决方案3】:

      假设您正在尝试创建一个 xml 站点地图,而不是 html 站点地图?

      我还没有这样做,并且想尽快尝试一下,但我会做的是:设置一个调用 example.com/index.php/sitemap 之类的路径的 cron 作业。然后站点地图控制器中的索引函数将运行查询以选择所有帖子的所有标题+为这些条目构建完整网址所需的一切,并且由于它是站点地图协议中的必需元素,因此上次更新条目时.如果您的数据库中没有此字段,您可能需要添加它。

      然后它只是循环遍历结果并写出具有适当结构的 xml 文件的问题。在循环时,您还必须根据每个条目确定优先级、changefreq 和所有其他元素。

      我也一直在查看http://www.xml-sitemaps.com/ 的付费版本,除了为您设置 cron 之外,它应该可以做所有事情,而且价格相当不错,并且可以在您自己的服务器上运行。我不认为你可以自己开发这个价值 19,99 美元的时间。而且,这个应用程序还会通知搜索引擎有新的内容,这是我上面还没有概述的方法。

      【讨论】:

        【解决方案4】:

        根据您创建的网站类型,您可以通过多种方式进行操作。

        例如,如果您正在制作一个新闻网站。您可以有一个页面链接到每篇新闻文章的永久链接。如果您能详细说明网站的类型/内容,我们可以提供更好的帮助。

        【讨论】:

        • 只要您提供一种通过网站导航以一致的方式访问每个页面的方法,您应该没问题。或者你想支持谷歌站点地图?
        【解决方案5】:

        站点地图结构中的update-frequency 参数告诉搜索引擎网页的更新频率。

        不要对页面的 URL 感到困惑,因为它可以通过多种方法进行更改。

        对于stackoverflow,此页面可能是questions.php?id=1317539,例如,对于questions.php,更新频率设置为一分钟

        因此,每分钟都会为 stackoverflow 网站生成一个新的站点地图。

        更新:This answer Robert 解释了当向系统添加新问题时 Stack Overflow 的站点地图会发生什么。

        【讨论】:

          【解决方案6】:

          最好的解决方案是在您的 apache .htaccess 文件中添加 RewriteEngine On 之后的以下行

          RewriteRule ^sitemap\.xml$ sitemap.php [L]
          

          然后只需在您的根文件夹中添加一个文件sitemap.php,通常可以通过http://yoursite.com/sitemap.xml(所有搜索引擎首先搜索的默认URL)访问该文件。

          文件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> 
          

          它有效:)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-11-25
            相关资源
            最近更新 更多