在百度搜索资源平台提交网站改版时,在 URL
结构发生了改变的情况下,为保证站外外链以及搜索引擎的收录的有效性,最好的办法当然时把旧链接 301
重定向到新链接上。
同时为了提交 URL对
到百度,需要获取到全站的链接,可以从数据库直接读取出来,也可以使用爬虫去爬,还可以使用 wordpress
内置函数获取,这里介绍另外一种办法,使用 wordpress
自带的 wordpress REST API
来获取。
所以本文分两部分:
获取 wordpress
全站链接
这个主要是因为百度的网站改版功能提供的正则太弱了,我的连接中有连接线 -
,而它提供的三种匹配都不能匹配到这个简单的字符,自己写的他还不忍,所以只能对而求其次,使用 URL对
来表明改版的 URL
对应关系了。
思路就是通过 wordpress REST API
(官方文档)获取到需要对应的链接,然后得到新链接,生成 URL对
上传到百度就可以了。
贴代码:
<?php
namespace app\controllers;
use yii\helpers\Json;
use yii\web\Controller;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
/**
* 百度站长平台修改url规则
* Created by PhpStorm.
* Date: 2018/12/18
* Time: 15:09
*/
class SpiderController extends Controller
{
public $base_url;
public $apis;
public function beforeAction($action)
{
$this->base_url = 'https://www.abc.com/wp-json/wp/v2/';
$this->apis = [
'posts' => [
'file' => 'postlinks.txt',
'url' => 'posts',
],
'tags' => [
'file' => 'taglinks.txt',
'url' => 'tags',
],
'cats' => [
'file' => 'catlinks.txt',
'url' => 'categories',
],
];
return true;
}
/**
* 通过wordpress json api 获取链接保存到txt中
* @param $type string cats|posts|tags
*/
public function actionGetUrl($type)
{
$client = new Client(['base_uri' => $this->base_url]);
file_put_contents($this->apis[$type]['file'], '');
for ($i = 1; $i < 26; $i++) {
$params = [
'page' => $i,
'per_page' => 50,
];
try {
$response = $client->request('GET', $this->apis[$type]['url'], ['query' => $params]);
$content = Json::decode($response->getBody());
$links = [];
foreach ($content as $item) {
$links[] = $item['link'];
file_put_contents($this->apis[$type]['file'], $item['link'] . PHP_EOL, FILE_APPEND);
}
} catch (ClientException $e) {
var_dump($e->getResponse());
exit;
}
}
}
/**
* 将保存的链接处理为百度要求的新旧URL对,存txt文件中
* @param $type string cats|posts|tags
*/
public function actionDoUrl($type)
{
file_put_contents('new_' . $this->apis[$type]['file'], '');
$file = fopen($this->apis[$type]['file'], "r");
while (!feof($file)) {
$str = trim(fgets($file));
$str2 = $str . ' ' . str_replace('/code_post/', '/', $str);
file_put_contents('new_' . $this->apis[$type]['file'], $str2 . PHP_EOL, FILE_APPEND);
}
fclose($file);
exit();
}
}
这样你就获取到了符合百度要求的三个 txt
文件,里面每行一个 URL对
,分别是文章,分类和标签,对于月份归档这样的可以通过正则匹配的就直接正则吧。
将 txt
文件上传到 网站改版
-> 新旧URL对
里面去。
然后我们来设置 Nginx
的 301重定向
。
Nginx
子目录 301重定向
原链接:
https://www.abc.com/code_post/index-of-fanli.html
;
目标链接:
https://www.abc.com/index-of-fanli.html
;
需要去掉中间的子目录 code_post
。
方法一: return
location ~* ^/code_post/(.*) {
return 301 https://www.abc.com/$1;
access_log off;
}
方法二: rewrite
location ~* ^/code_post/ {
rewrite ^/code_post/(.*)$ https://www.abc.com/$1 permanent;
access_log off;
}
这两种实现方式,在不同域名之间的 301
跳转时同样适用。保存配置文件后重启 Nginx
。
然后就到后台将 wordpress
固定连接中 code_post
去掉吧。
到此,针对百度搜索资源平台的一次网站 URL
改版就完成了,百度蜘蛛会根据你提交的规则去验证规则,等规则验证完流量稳定了,你就可以把 301
去掉了。
标题:百度网站改版nginx子目录301跳转及wordpress全站链接规则修改
原文链接:https://beltxman.com/2254.html
若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。
博主,最近Thinkphp转换到wp也遇到同样的收录问题
原url https://xx.com/mip/1.html 现 https://xx.com/分类/1.html?mip
请问这规则该如何写呢?
你这个替换规则可以写,但是301跳转就不好弄了。
替换规则你就先把所有链接提取,然后按照你这个规则生成新url,然后一一对应起来输出到文件,然后把这个文件传到改版里面去,至于301跳转,随缘吧。
我想说的是既然已经用框架独立做了站,为啥回来用wordpress呢,tp做二开定制功能啥的不是更方便吗?
66
我想更改固定链接为数字,你有什么好方法?
把你的链接和数字对应起来,出
URL对
txt文件,上传到百度的网站改版里面去就行了。