目录
一个网站的url格式和规则一定在建站之初就应该确定好,后期也不建议随便修改,否则网站中可能出现大量的404页面,处理起来很麻烦的。当然,如果你不在乎SEO,那就随便改,可话又说回来了,但凡能想到修改url格式的人多半又比较关心网站SEO优化。所以需要设备文章批量设置301跳转。
比如近期应客户要求,给网站修改文章的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 2020~2026. 悦然网络工作室/悦然wordpress建站 专注中小企业wordpress建站 All Rights Reserved.网站地图本站图片来源为Pexels、Pixabay、Freepik、Unsplash等图片库的免费许可,CC0协议;还有部分为自己手绘或AI生成,版权碰瓷请自重!法律服务:law@yueranseo.com蜀ICP备20016391号-1 川公网安备 51011502000367号