目录
Toggle一个网站的url格式和规则一定在建站之初就应该确定好,后期也不建议随便修改,否则网站中可能出现大量的404页面,处理起来很麻烦的。当然,如果你不在乎SEO,那就随便改,可话又说回来了,但凡能想到修改url格式的人多半又比较关心网站SEO优化。
比如近期应客户要求,给网站修改文章的url格式,在所有文章的slug前加上一个固定的blog,虽然看不太懂,但收了钱就要办事。
修改方法:在wordpress网站后台的固定链接中修改为【blog/%postname%/】即可。
修改之后问题来了,原来已收录的文章打不开了,显示404,因为Url都变了。如果网站未收录,可以不用管,但有收录的话就需要做一下301跳转。
这里提供两个方法:
有很多SEO插件都自带了免费的301跳转功能,比如rank math seo,slim seo等,但一般只能手动一个个链接添加,文章比较多的话,手动就特别累人了。虽然跳转插件一般支持正则表达式,但同样麻烦,而且大多数人都不会写。
如果有成百上千篇文章需要跳转,使用代码效率会更高一些,这里直接分享代码如下【供参考】:
function redirect_old_post_urls() {
// 只处理404请求和文章请求
if (is_404() || is_singular('post')) {
global $wp;
$current_path = trim($wp->request, '/');
// 排除后台、REST API等特殊请求
if (is_admin() || wp_doing_ajax() || wp_doing_cron() || defined('REST_REQUEST')) {
return;
}
// 尝试获取当前请求对应的文章ID
$post_id = 0;
if (is_singular('post')) {
$post_id = get_queried_object_id();
} elseif (is_404()) {
// 从URL中提取可能的slug
$potential_slug = basename($current_path);
// 通过slug查询文章
$post = get_page_by_path($potential_slug, OBJECT, 'post');
if ($post) {
$post_id = $post->ID;
}
}
// 如果找到有效文章
if ($post_id) {
$new_url = get_permalink($post_id);
// 检查新旧URL格式差异
$old_url = home_url($current_path);
$expected_new_url = str_replace(home_url(), home_url('/blog'), $old_url);
// 只有当新URL包含/blog/且当前URL不包含时重定向
if ($new_url && strpos($new_url, '/blog/') !== false && strpos($old_url, '/blog/') === false) {
// 保留查询参数
$query_string = $_SERVER['QUERY_STRING'] ?? '';
if ($query_string) {
$new_url = add_query_arg($query_string, '', $new_url);
}
wp_redirect($new_url, 301);
exit;
}
}
}
}
add_action('template_redirect', 'redirect_old_post_urls', 5);
根据你自己修改的url格式,blog可以替换为其它。代码可以添加到当前主题的functions.php文件,或者是添加到code snippets之类的插件中。
不管使用上面哪种方法跳转,设置之后都需要清空缓存,然后打开检查一下,或者使用工具检测,看它能不能正确跳转。
以上就是今天分享的内容,但我希望大家不会遇到类似的问题😀。网站URL规则一定不要随便修改。
© Copyright 2024. 悦然网络工作室/悦然wordpress建站 专注中小企业wordpress建站 All Rights Reserved.网站地图
本站图片来源为Pexels、Pixabay、Freepik、Unsplash等图片库的免费许可,CC0协议;还有部分为自己手绘,版权碰瓷请自重!法律服务:law@yueranseo.com 蜀ICP备20016391号-1 川公网安备 51011502000367号