2026.06.06 | youres | 25次围观
为什么要用curl批量检测UTM参数
做营销投放的同学都知道,UTM参数是追踪流量来源的生命线。短链跳转、CDN层重定向、Nginx/Cloudflare配置不当,都可能导致UTM参数在重定向过程中被静默丢弃。等发现GA4报表里流量归因变成(direct)的时候,预算已经浪费了一大截。
手动一个一个用curl -L -v去测?几百条短链人手点得点到明年。我们需要一个批量检测脚本,自动逐条验证UTM参数在重定向后是否完整保留,并输出结构化结果。
curl -L 与 url_effective 的核心作用
curl -L让请求跟随重定向,但光有-L只能看到最终响应内容,无法精确获取最终跳转后的URL。url_effective是curl的write-out变量,专门用来输出"实际生效的最终URL"——也就是重定向链路的最后一跳地址。
核心思路:
-L:跟随重定向(处理301/302/307/308)-w "%{url_effective}":请求完成后输出最终URL- 将最终URL与原始URL对比,判断UTM参数是否保留
基础版:单条URL检测命令
# 查看单条URL重定向后的最终地址(含UTM参数)
curl -L -s -o /dev/null -w "最终URL: %{url_effective}\n" "https://short.url/abc?utm_source=wechat&utm_medium=social"
参数说明:
-s:静默模式,不显示进度条-o /dev/null:丢弃响应体,只看头部和重定向-w:请求完成后执行格式化输出
进阶版:批量检测脚本(Shell版)
以下脚本从urls.txt逐行读取URL,自动检测UTM参数是否保留,并输出CSV格式报告:
#!/bin/bash
# urls.txt 每行一个待检测URL,格式:https://短链/xxx?utm_source=xxx
while IFS= read -r url; do
final_url=$(curl -L -s -o /dev/null -w "%{url_effective}" "$url")
if [[ "$final_url" == *"utm_"* ]]; then
echo "$url,PASS,$final_url"
else
echo "$url,FAIL,$final_url"
fi
done < urls.txt > result.csv
增强版:输出JSON格式(配合jq解析)
如果你需要将检测结果接入监控系统或导入数据库,JSON格式更合适:
#!/bin/bash
echo "[" > result.json
first=true
while IFS= read -r url; do
final_url=$(curl -L -s -o /dev/null -w "%{url_effective}" "$url")
status_code=$(curl -L -s -o /dev/null -w "%{http_code}" "$url")
if [ "$first" = true ]; then
first=false
else
echo "," >> result.json
fi
cat >> result.json << EOF
{"url":"$url","final_url":"$final_url","status":"$status_code"}
EOF
done < urls.txt
echo "]" >> result.json
PowerShell版本(Windows环境)
Windows用户没有bash,但可以用PowerShell实现同样功能:
$urls = Get-Content urls.txt
foreach ($url in $urls) {
$resp = Invoke-WebRequest -Uri $url -MaximumRedirection 5 -SkipCertificateCheck
$finalUrl = $resp.BaseResponse.RequestMessage.RequestUri.ToString()
if ($finalUrl -match "utm_") {
"$url,PASS,$finalUrl" >> result.csv
} else {
"$url,FAIL,$finalUrl" >> result.csv
}
}
常见导致UTM丢失的原因
- Nginx return 301 没加 $is_args$args:导致查询字符串被截断
- Cloudflare"始终使用HTTPS":默认不保留查询字符串,需要配置Transform Rules
- 短链服务配置错误:部分短链平台跳转时主动丢弃UTM参数
- 后端框架redirect方法:某些框架默认不保留原始查询参数
相关文章
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论