求助:站点地图抓取无效URL,需优化文章页Rewrite规则
问题:站点地图生成器抓取大量无效URL,Rewrite规则需优化
站点地图生成器抓取了约64个不存在的URL。原本仅希望将形如/article.php?id=#的页面重写为article/#/article-title-here格式,但生成器却生成了诸如/article/article.php/index.php或/article/index.php这类无效URL。
当前的.htaccess规则:
RewriteEngine On # Redirect HTTP requests to HTTPS RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^(?:www\.)?(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # Redirect old article URLs to new URLs RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^article\.php$ /article/%1/%{QUERY_STRING}? [R=301,L] # Rewrite article URLs RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^article/([0-9]+)/([^/]+)/?$ article.php?id=$1&title=$2 [L,QSA]
解决方案
1. 修复旧URL重定向规则的错误
原重定向规则错误地将查询字符串追加到新路径中,会生成类似/article/123/id=123的路径,被爬虫误判为有效路径。修改规则如下:
# Redirect old article URLs to new URLs RewriteCond %{QUERY_STRING} ^id=([0-9]+)$ RewriteRule ^article\.php$ /article/%1/ [R=301,L]
这样旧URL会直接跳转到规范的/article/数字/路径,避免多余的查询字符串干扰爬虫。
2. 阻止无效路径的访问
在.htaccess中添加规则,仅允许合法的文章URL格式,其余返回404,从源头阻止爬虫抓取无效路径:
# 仅允许合法的文章URL格式,其余返回404 RewriteCond %{REQUEST_URI} ^/article/ RewriteRule !^article/[0-9]+/[^/]+/?$ - [R=404,L]
这条规则会对所有以/article/开头但不符合article/数字/标题/格式的请求返回404,爬虫抓取到404后会将这些URL从站点地图中排除。
3. 手动生成站点地图(最可靠方案)
既然你的网站只有5个主页面和7个文章页面,手动生成站点地图是最稳妥的方式,完全避免自动抓取的误差:
- 创建
sitemap.xml文件,放在网站根目录,内容示例:
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <!-- 主页面 --> <url><loc>https://你的域名/</loc></url> <url><loc>https://你的域名/about/</loc></url> <!-- 补充剩余3个主页面 --> <!-- 文章页面 --> <url><loc>https://你的域名/article/1/文章标题1/</loc></url> <url><loc>https://你的域名/article/2/文章标题2/</loc></url> <!-- 补充剩余5个文章页面 --> </urlset>
- 在
robots.txt中添加站点地图地址,引导爬虫直接读取:
Sitemap: https://你的域名/sitemap.xml
4. 清理缓存并提交新站点地图
由于之前的301重定向规则可能已被爬虫缓存,修改规则后可通过搜索引擎管理工具提交新的站点地图,并请求重新抓取,确保爬虫更新URL数据。
内容的提问来源于stack exchange,提问作者YippeKaye
相关产品推荐
相关产品推荐

