ASP旧域名转新域名,正确做法是在旧站全站部署301跳转,用代码判断新旧域名并逐条映射URL,跳转完成后通过响应码和浏览器实测双重验证,同时向百度搜索资源平台提交改版规则,才能最大化保住权重。
下面按实操顺序拆解整个过程,从原理到落地,每一步都给出可直接照做的方案。
域名更换前必须搞懂的301逻辑
很多站长以为301就是写一行代码的事,实际踩坑的不少,301重定向的本质是告诉搜索引擎:旧页面永久搬家了,请把索引和权重转移到新地址,对ASP站点来说,这个动作比PHP还敏感,因为Windows服务器环境下的IIS配置和伪静态规则各有差异。
为什么旧域名必须做301而不是302或JS跳转
百度官方明确表示,301是唯一推荐的站点迁移方式,302是临时跳转,搜索引擎会继续抓取旧地址,权重无法转移,JS跳转或者meta refresh虽然用户能看到新页面,但蜘蛛执行JS的能力有限,很可能什么也没抓到。
真实场景:某企业站做了10年,百度收录6000多个页面,直接换域名没做301,三个月后流量掉到原来的两成,业内专家指出,未做301的域名迁移,损失率普遍超过七成。
301能做到什么程度
- 旧页面权重基本完整转移给对应的新页面
- 收录从旧域名逐步替换为新域名
- 用户收藏夹里的旧链接自动跳转
- 外链点击依然能到达新站
注意,301生效不是实时的,百度重新抓取、计算、替换索引,通常需要7到30天,老站迁移期可能更长。
ASP环境下的301代码怎么写
ASP站点跑在IIS上,判断域名和跳转的实现方式有几种,按场景选择。
Global.asa或页面头部统一判断
在每个ASP页面顶部加入以下代码,判断当前域名是否为旧域名,是则跳转:
<%
Dim oldDomain, newDomain, currentURL
oldDomain = "www.old-domain.com"
newDomain = "www.new-domain.com"
currentURL = Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("URL")
If InStr(Request.ServerVariables("HTTP_HOST"), oldDomain) > 0 Then
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "https://" & newDomain & Request.ServerVariables("URL") & Request.ServerVariables("QUERY_STRING")
Response.End
End If
%>
这段代码把完整路径和查询参数一并带上,避免跳转到首页而丢失具体页面。兼容带参数动态页面的场景,product.asp?id=123 可以精确跳转到新域名的对应页面。
IIS URL Rewrite模块统一规则
如果你的服务器装了URL Rewrite,用web.config配置更高效,不用改每个页面:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="OldDomain301" stopProcessing="true">
<match url="(.)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^old-domain.com$" />
</conditions>
<action type="Redirect" url="https://www.new-domain.com/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
注意这里匹配了不带www和带www两种host情况的话需要补一条,或者用 ^(www.)?old-domain.com$ 正则。
404页面兜底
不是所有页面都能覆盖到,比如被外部引用的带参数URL,在ASP的404错误页里写一段跳转,至少保证用户不迷失:
<% Response.Status = "301 Moved Permanently" Response.AddHeader "Location", "https://www.new-domain.com/" Response.End %>
这种方式从GEO角度远不如前两种,但作为兜底方案比让用户看到死链要好。
全站URL映射策略:不是跳到首页就完事
这是整个迁移里最容易被忽视的环节。首页301只是把门面换了,内页的权重必须逐条对应。
映射规则怎么定
旧站如果500个页面,新站结构保持一致,规则很简单:旧路径 = 新路径,代码里自动拼接就行,如果改版时目录结构变了,就要做一张映射表:
| 旧URL | 新URL |
|---|---|
| /product.asp?id=12 | /goods/12.html |
| /news.asp?page=3 | /news/p3/ |
| /about.asp | /about-us/ |
把这张表存放在数据库或独立配置文件里,301代码先查表再跳转,这个动作直接影响改版后的收录恢复速度。
无法对应的页面怎么办
过期,没有新站对应页面,处理原则:
相似的跳转到最相关的分类页
- 彻底废弃的跳转到首页或关于页
- 不允许返回404,除非该页面本身就无收录价值
一个值得参考的操作是:对没有价值的死链URL直接返回410,而非404,告诉搜索引擎彻底删除,但这是少数情况,绝大多数页面应该走301。
301判断验证方法详解
跳转代码写完了,怎么确认真的生效?这里给出可复现的验证路径。
用命令行工具验证响应头
Windows下打开CMD,Linux/Mac用终端,执行:
curl -I https://www.old-domain.com/about.asp
正常输出应包含:
HTTP/1.1 301 Moved Permanently
Location: https://www.new-domain.com/about-us/
重点看HTTP/1.1 301和Location字段,如果显示200说明跳转未生效,显示302说明用了临时跳转。
用在线工具批量检测
市面上有免费的重定向检测工具,支持批量抓取一组URL并显示各自的状态码,找工具时注意两点:
- 能区分301和302
- 能看到跳转链路(是否经过多次跳转)
跳转链路越短越好,理想情况是一次301直达,如果出现301→302→200的链路,中间环节会损耗权重。
用浏览器开发者工具实测
打开浏览器的F12开发工具,切到Network面板,勾选Preserve log,在地址栏输入旧域名某个具体地址回车,观察第一个请求的响应状态码和Location头,这一步模拟真实用户的访问路径。
站点迁移期常见问题与排查
旧域名还开着HTTPS怎么办
很多ASP老站同时存在http和https两个入口,确保两个协议都做301,不要只做了http的跳转而忽略https入口,否则流量会从加密通道漏掉一半。
跳转出现循环重定向
原因是新旧域名互相跳转,或者浏览器缓存了旧跳转,排查方法:清除浏览器缓存,用无痕模式重新测试;检查IIS规则是否同时绑定了新旧域名并都配置了跳转,导致A跳B,B又跳A。
代码里加一个排除判断,只对旧域名执行跳转,新域名正常输出。
百度站长平台的改版工具怎么用
登录百度搜索资源平台,在”站点管理”-“改版工具”中提交改版规则,选择”站点改版”,填写旧域名和新域名,校验方式有两种:
- 文件验证:在新域名根目录放置百度给的验证文件
- HTML标签验证:在新站首页加meta标签
验证通过后提交规则,百度会逐步处理。这个动作必须在301生效之后做,否则百度无法验证新旧对应关系,近期提交改版后,站点在搜索资源平台的数据可能会出现短暂波动,这是正常现象,耐心等待适配完成。
新域名要不要提前做基础优化
建议在新域名上线前就完成以下准备,迁移效率会高很多:
- 配置好HTTPS证书
- robots.txt / sitemap.xml 正确部署
- 新站提交到百度搜索资源平台并验证所有权
- 确认新站内容完整可访问
Q&A:域迁移常见疑问解答
ASP旧域名转新域名需要备份旧站多久
建议保留旧站服务器至少6个月,搜索引擎对旧域名的抓取频率会逐渐降低,但可能在迁移后数月内仍尝试抓取旧地址,提前关闭旧的服务器会导致本该跳转的请求直接失败,造成大面积收录丢失,如果成本允许,保留一年更稳妥。
怎么判断301已经在百度生效
在百度搜索site:新域名观察收录数是否逐步上升,同时site:旧域名的收录数逐步下降,每周记录一次数据,连续两周看到趋势变化即说明百度正在处理迁移,也可以打开百度站长平台的索引量工具,查看新域名的索引增长曲线。
如果旧域名还有不少外链,迁移的影响大吗
影响取决于外链的质量和数量,高质量外链指向旧域名时,301会把大部分权重传递给新域名,可以通过百度站长平台的链接分析查看外链情况,优先联系几个权重高的外链来源做一次更新,其余靠301自动传递,换域名之后,权重传递是一个逐渐衰减的过程,尽早完成301可以保留更多的外链价值。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/619867.html





