当前位置:首页 > PHP

php 实现sitemap

2026-02-28 08:58:52PHP

生成静态 Sitemap.xml 文件

使用 PHP 生成静态 sitemap.xml 文件,适合内容较少且不频繁更新的网站。以下是一个基础示例:

<?php
$urls = [
    'https://example.com/',
    'https://example.com/page1',
    'https://example.com/page2'
];

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');

foreach ($urls as $url) {
    $urlNode = $xml->addChild('url');
    $urlNode->addChild('loc', $url);
    $urlNode->addChild('lastmod', date('Y-m-d'));
    $urlNode->addChild('changefreq', 'weekly');
    $urlNode->addChild('priority', '0.8');
}

header('Content-Type: application/xml');
echo $xml->asXML();
file_put_contents('sitemap.xml', $xml->asXML()); // 保存为文件
?>

动态生成 Sitemap

适合动态内容网站,直接从数据库获取 URL 并实时生成:

php 实现sitemap

<?php
// 假设从数据库获取页面数据
$pages = [
    ['url' => 'https://example.com/', 'updated_at' => '2023-10-01'],
    ['url' => 'https://example.com/blog', 'updated_at' => '2023-09-15']
];

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');

foreach ($pages as $page) {
    $urlNode = $xml->addChild('url');
    $urlNode->addChild('loc', $page['url']);
    $urlNode->addChild('lastmod', $page['updated_at']);
    $urlNode->addChild('changefreq', 'monthly');
    $urlNode->addChild('priority', '0.5');
}

header('Content-Type: application/xml');
echo $xml->asXML();
?>

分块处理大型 Sitemap

如果 URL 数量超过 50,000,需分块生成多个文件并通过索引文件管理:

主索引文件 (sitemap-index.xml)

php 实现sitemap

<?php
$sitemaps = [
    'https://example.com/sitemap-pages.xml',
    'https://example.com/sitemap-posts.xml'
];

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></sitemapindex>');

foreach ($sitemaps as $sitemapUrl) {
    $sitemapNode = $xml->addChild('sitemap');
    $sitemapNode->addChild('loc', $sitemapUrl);
    $sitemapNode->addChild('lastmod', date('Y-m-d'));
}

header('Content-Type: application/xml');
echo $xml->asXML();
?>

子 Sitemap 文件示例 (sitemap-pages.xml)

<?php
$pages = [ /* 从数据库获取部分数据 */ ];
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');

// 添加部分 URL...
?>

自动提交到搜索引擎

生成后可通过 PHP 发送 Ping 请求通知搜索引擎:

$sitemapUrl = urlencode('https://example.com/sitemap.xml');
file_get_contents("http://www.google.com/ping?sitemap=$sitemapUrl");
file_get_contents("http://www.bing.com/ping?sitemap=$sitemapUrl");

注意事项

  • 确保 XML 符合标准,可通过 W3C Validator 检查。
  • 动态生成时建议缓存,避免频繁查询数据库。
  • 分块文件需确保每个子文件不超过 50MB 或 50,000 条 URL。

标签: phpsitemap
分享给朋友:

相关文章

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…