如何用PHP配置Google索引规则:仅收录管理员归档URL
问题描述
我的数据库中存储着格式为<a href="http://www.site.com/random_alias" rel="nofollow noreferrer">www.site.com/random_alias</a>的落地页(splash pages)URL记录,其中部分URL由管理员(userid=1)创建并已归档(archived=1)。我需要让Google仅索引这类URL,其余URL设置为noindex、nofollow。但当前使用的PHP代码过滤条件失效,所有页面都被设置为index。
原PHP代码:
<?php foreach (\Core\DB::url()->where('userid', '1') ->where('archived', '1')) if ($url['userid'] == 1 && $url['Archived'] == 1) { echo '<meta name="robots" content="index, follow"/>'; } else { echo '<meta name="robots" content="noindex, nofollow"/>'; } endforeach; ?>
对应的SQL查询语句:
SELECT userid, archived FROM psiturl WHERE userid = 1 AND archived='1'
原代码问题分析
- 循环逻辑完全错误:原代码只查询了
userid=1且archived=1的记录,循环里的else分支根本不会触发,自然所有页面都输出index, follow。 - 字段名大小写不匹配:数据库字段是
archived(全小写),代码里判断的是$url['Archived'](首字母大写),会导致条件判断失效。 - 语法错误:
foreach语句缺少as $url,且where链式调用末尾多了一个闭合括号,代码本身无法正常执行。
修正后的PHP代码
<?php // 先获取当前访问页面对应的数据库记录(需根据实际业务调整匹配逻辑) // 示例:假设当前请求的路径就是random_alias,用它匹配数据库中的URL $currentPath = trim($_SERVER['REQUEST_URI'], '/'); $urlRecord = \Core\DB::url()->where('url', LIKE, "%/{$currentPath}")->first(); // 判断是否符合索引条件 if ($urlRecord && $urlRecord['userid'] == 1 && $urlRecord['archived'] == 1) { echo '<meta name="robots" content="index, follow"/>'; } else { echo '<meta name="robots" content="noindex, nofollow"/>'; } ?>
关键说明
- 核心逻辑是先匹配当前页面对应的单条数据库记录,再做条件判断,而不是循环所有符合条件的记录。
- 需根据实际业务调整
$currentPath和$urlRecord的查询规则,确保能准确找到当前页面的对应记录。 - 严格保持字段名与数据库一致(
archived全小写)。
内容的提问来源于stack exchange,提问作者Ali Haseli
相关产品推荐
相关产品推荐

