带有 MySql 数据库的动态 PHP 网站;如何为此创建站点地图?
Posted
技术标签:
【中文标题】带有 MySql 数据库的动态 PHP 网站;如何为此创建站点地图?【英文标题】:Dynamic PHP website with MySql database; How to create a sitemap for this? 【发布时间】:2011-05-25 22:00:26 【问题描述】:我有一个分类网站。该网站基于 php,并使用 mysql 数据库。
今天,我有一个必须使用外部 php 脚本更新的站点地图。 此 php 脚本从数据库中获取所有分类信息并创建一个全新的 xml 站点地图。
问题是我必须手动执行此操作,首先打开 php 脚本,然后等待它完成,然后再次将站点地图提交给谷歌(即使最后一步是可选的,我仍然这样做)。
我还必须指出,即使我确实将其提交给 google,它仍然没有被编入索引(不会出现在搜索结果中),这是我想要的。
我希望分类广告尽快显示在 google SERPS 中。目前这需要的时间太长......大概一周左右。
无论如何,我需要知道如何改进我拥有的这种方法。 我应该在每个新分类上打开并写入 xml 文件吗?
我犹豫是否这样做,因为这意味着文件几乎一直处于打开状态,因为新分类很频繁,有时同时有几个新分类,那么这将如何影响打开和写入文件如果该文件已在使用等...
有没有其他方法,比如向google提交一个php站点地图,每当google访问这个php文件时,就会动态创建一个新的xml?
需要一些关于如何以最佳方式执行此操作的想法...
另外,问题 2: 如果我的服务器上没有指向特定页面的任何链接(站点地图中的链接除外),该页面是否仍会被编入索引?
谢谢
【问题讨论】:
【参考方案1】:您对 Google 的要求太高了。他们不是魔法。索引整个互联网是一项艰巨的任务。他们不是在那里做你想做的事。但是,有一些方法可以让谷歌更快地注意到事情,也有一些方法可以通过其他方式获得更多最新的搜索。
第一步。 xml 站点地图很好,但它仍然有助于拥有合法的 html 无处不在的链接列表/地图。这是因为链接通常比站点地图更重要。如此多的搜索引擎可以更快地找到它们。
在这点上,不是唯一链接到您的东西的东西是一个巨大的帮助。索引的工作方式意味着越早进入列表意味着越早在谷歌中更新。来自外部的更多链接意味着更多的入口点。
此外,Google 确定您网站重要性的方式部分取决于其他人链接到您的数量。更重要意味着更频繁地被抓取以获取新信息。
现在,关于实时搜索。搜索中的“下一件大事”是使用实时项目来获得更相关的结果。谷歌已经为某些事情做了一些这样的事情。体育,大型活动,例如最近的太空探索公司发射,等等。他们正在使用 Buzz 和 Twitter。其他人正在使用 facebook 和其他一些服务。
鼓励您的用户在推特/点赞您的商品可以让您更易于实时搜索。因此,当一个新列表出现时,推特上可能会出现一堆链接,然后它们更有可能出现在实时搜索中。
【讨论】:
【参考方案2】:您可以将构建站点地图的脚本放入创建新分类广告的逻辑循环中。这样,每次创建新广告时,站点地图都会更新。
Google has advice 关于使用 HTTP ping 服务自动提交站点地图。您可以使用 PHP 的 Client URL Library 来创建 ping。
最后,如果您试图让 Google 更快地为您的网页编制索引,那么您会很不走运。正如他们在Webmaster Guidelines(在站点地图部分)中所说:
Google 不保证我们会抓取您的所有网址或将其编入索引。
简而言之:在 Google 的算法开始认为您的网站是 HotShitTM 之前,他们不会为每个 URL 编制索引,并且通常会花时间处理它,无论站点地图与否。
【讨论】:
【参考方案3】:我为 Laravel 网站创建了一个小型站点地图。由于它的 MVC 拱结构保持不变。
路由部分:
Route::get('/sitemap', ['as' => 'Sitemap index', 'uses' => 'SiteMapController@index']);
Route::get('/sitemap/page', ['as' => 'Sitemap page', 'uses' => 'SiteMapController@page']);
查看第二部分文件 Index.php 这将是主站点地图索引文件
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc><?php echo url('/') ?>/sitemap/page</loc>
<lastmod><?php echo date('c', time()); ?></lastmod>
</sitemap>
<sitemap>
<loc><?php echo url('/') ?>/sitemap/exchanges</loc>
<lastmod><?php echo date('c', time()); ?></lastmod>
</sitemap>
page.php 这是单个 urlset 的附件文件
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php foreach ($posts as $post) ?>
<url><loc><?php echo url('/') ?>/<?php echo $post['uri']; ?></loc><lastmod><?php echo $post['time']; ?></lastmod> <changefreq><?php echo $post['freequency']; ?></changefreq>
<priority><?php echo $post['priority']; ?></priority>
</url>
<?php ?>
</urlset>
现在,控制器,在您运行 show:SitemapController.php 的地方,您可以根据您在内容中提供的更新的频率和新鲜度来更改时间。
class SiteMapController extends Controller
public function index()
return response()->view('sitemap.index')->header('Content-Type', 'text/xml');
public function page()
$posts = array(
array("uri" => "", "time" => date('c', time()), "freequency" => "Daily", "priority" => "0.8"),
array("uri" => "about-us", "time" => "2018-08-17", "freequency" => "Monthly", "priority" => "0.5"),
array("uri" => "contact-us", "time" => "2018-08-17", "freequency" => "Monthly", "priority" => "0.5"),
array("uri" => "privacy-policy", "time" => "2018-08-17", "freequency" => "Monthly", "priority" => "0.5"),
array("uri" => "cookie-policy", "time" => "2018-08-17", "freequency" => "Monthly", "priority" => "0.5"),
array("uri" => "thank-you", "time" => "2018-08-17", "freequency" => "Monthly", "priority" => "0.5"),
);
return response()->view('sitemap.page', ['posts' => $posts])->header('Content-Type', 'text/xml');
【讨论】:
以上是关于带有 MySql 数据库的动态 PHP 网站;如何为此创建站点地图?的主要内容,如果未能解决你的问题,请参考以下文章