百度OCPC推广埋点回传bd_vid或invite自定义值,SEM实现全局储存自定义参数值!登录状态自定义url按钮href值

32 次浏览次阅读
没有评论

百度OCPC推广之不同的页面跳转储存bd_vid值,以及自定义invite参数一并回传JS代码。

百度OCPC推广埋点回传bd_vid或invite自定义值,SEM实现全局储存自定义参数值!登录状态自定义url按钮href值

将SEM的URL手动埋点,存入localStorage,方便后面在使用中调用!

自动获取URL中传过来的 invite 和 bd_vid值

(bd_vid通常是百度OCPT推广时自动添加的参数)

/**
 * 
 * 百度埋点
 * 函数打包
 * 记录invite值 和 bd_vid值
 * 日期:2025-5-28 MAOMAO
 */
function handleSemTracking(options = {}) {
  const TRACK_KEYS = options.keys || ['invite', 'bd_vid'];
  const EXPIRE_MS = options.expireMs || 24 * 60 * 60 * 1000; // 默认1天

  // 辅助函数:获取 query 参数
  function getQueryParam(param) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(param);
  }

  // 存 key 对应的值
  function setKey(key, value) {
    localStorage.setItem(`sem_${key}`, value);
    localStorage.setItem(`sem_${key}_time`, Date.now().toString());
  }

  // 获取 key 对应的值(处理过期)
  function getKey(key) {
    const timestamp = localStorage.getItem(`sem_${key}_time`);
    if (!timestamp) return null;
    if ((Date.now() - parseInt(timestamp, 10)) > EXPIRE_MS) {
      clearKey(key);
      return null;
    }
    return localStorage.getItem(`sem_${key}`);
  }

  function clearKey(key) {
    localStorage.removeItem(`sem_${key}`);
    localStorage.removeItem(`sem_${key}_time`);
  }

  function init() {
    TRACK_KEYS.forEach(key => {
      const val = getQueryParam(key);
      if (val) {
        setKey(key, val);
      } else {
        getKey(key); // 触发过期检测
      }
    });
  }

  init();

  // 返回接口
  return {
    getAll: () => {
      const result = {};
      TRACK_KEYS.forEach(key => {
        const val = getKey(key);
        if (val) result[key] = val;
      });
      return result;
    },
    get: getKey,
    clear: () => {
      TRACK_KEYS.forEach(clearKey);
    }
  };
}

handleSemTracking(); // 先执行埋点追踪并存入 localStorage
//百度埋点 MAOMAO end

登陆状态-未登录

应用场景:将全局类名带有ann_button的<a>标签中 href属性值 增加invite和bd_vid参数

// 未登录状态 - 按钮拼接 invite 和 bd_vid 参数 MAOMAO
            const buttons = document.querySelectorAll('.ann_button');
            const inviteValue = localStorage.getItem('sem_invite');
            const bdVidValue = localStorage.getItem('sem_bd_vid');
            buttons.forEach(button => {
                const href = button.getAttribute('href');
                if (!href) return;

                try {
                    const url = new URL(href, window.location.origin); // 兼容相对路径
                    let changed = false;

                    if (inviteValue) {
                        url.searchParams.set('invite', inviteValue);
                        changed = true;
                    }

                    if (bdVidValue) {
                        url.searchParams.set('bd_vid', bdVidValue);
                        changed = true;
                    }

                    if (changed) {
                        button.setAttribute('href', url.toString());
                    }
                } catch (e) {
                    console.warn('无效 href,跳过该按钮:', href);
                }
            });
            // 未登录状态 - 按钮拼接 invite 和 bd_vid 参数 MAOMAO end

登陆状态-已登录

应用场景:将带callback参数里的url直接赋给ann_button类里的href地址

// 已登录状态-按钮跳转应用广场 MAOMAO
            const buttons = document.querySelectorAll('.ann_button');
            buttons.forEach(button => {
                const href = button.getAttribute('href');
                const url = new URL(href);
                const callback = url.searchParams.get('callback');

                if (callback) {
                // 构造新的 URL,包含 callback 后面的所有参数
                const newHref = new URL(callback);
                // 把原 href 中除了 callback 的其他参数都加到新 URL 上
                url.searchParams.forEach((value, key) => {
                    if (key !== 'callback') {
                    newHref.searchParams.set(key, value);
                    }
                });
                button.setAttribute('href', newHref.toString());
                }
            });
            //MAOMAO end

开发人员:李辉

应用场景:百度SEM投放手动埋点

后续的API回传可参考文档:百度API参考文档地址

百度OCPC推广埋点回传bd_vid或invite自定义值,SEM实现全局储存自定义参数值!登录状态自定义url按钮href值
正文完
 0
评论(没有评论)

辉哥

一言一句话
-「
最新文章
客服机器人的公司排名靠谱吗?衡量一个AI客服好坏的关键指标是什么?

客服机器人的公司排名靠谱吗?衡量一个AI客服好坏的关键指标是什么?

客服机器人的公司排名靠谱吗?衡量一个AI客服好坏的关键指标是什么? 在选择AI客服机器人时,很多企业都会先看各...
智能客服机器人费用高吗?投资AI客服机器人的回报率如何?

智能客服机器人费用高吗?投资AI客服机器人的回报率如何?

智能客服机器人费用高吗?投资AI客服机器人的回报率如何? 在数字化时代,智能客服机器人已成为企业提升服务效率、...
智能客服机器人的核心技术是什么?不同厂商的技术路线对效果有何影响?

智能客服机器人的核心技术是什么?不同厂商的技术路线对效果有何影响?

智能客服机器人的核心技术是什么?不同厂商的技术路线对效果有何影响? 在数字化时代,智能客服机器人已成为企业提升...
知识库系统到底该怎么搭建?有没有适合零基础用户的实施指南?

知识库系统到底该怎么搭建?有没有适合零基础用户的实施指南?

知识库系统到底该怎么搭建?有没有适合零基础用户的实施指南? 在数字化时代,知识库系统已成为企业沉淀经验、提升效...
AI训练场系统是否适合中小企业使用?它的实施成本和周期大概是多久?

AI训练场系统是否适合中小企业使用?它的实施成本和周期大概是多久?

AI训练场系统是否适合中小企业使用?实施成本和周期详解 在电商和服务行业高速发展的今天,客服团队的培训效率直接...
AI训练场到底是什么?它如何帮助企业快速构建智能模型?

AI训练场到底是什么?它如何帮助企业快速构建智能模型?

AI训练场到底是什么?它如何帮助企业快速构建智能模型? 在数字化时代,企业客服团队面临着人员流动大、培训周期长...
智能客服机器人的公司排名靠前产品有哪些?选购时要注意哪些指标?

智能客服机器人的公司排名靠前产品有哪些?选购时要注意哪些指标?

智能客服机器人的公司排名靠前产品有哪些?选购时要注意哪些指标? 2025-2026年智能客服机器人头部厂商及产...
智能客服系统一般包含哪些功能模块?企业如何依据需求选型?

智能客服系统一般包含哪些功能模块?企业如何依据需求选型?

智能客服系统一般包含哪些功能模块?企业如何依据需求选型? 在数字化时代,智能客服系统已成为企业提升客户服务效率...
AI客服机器人的工作原理是什么?它是否能真正替代人工客服工作?

AI客服机器人的工作原理是什么?它是否能真正替代人工客服工作?

AI客服机器人的工作原理是什么?它是否能真正替代人工客服工作? 在数字化时代,AI客服机器人已成为众多企业提升...
AI客服机器人的报价高吗?其实际费用与人工客服相比有哪些优势?

AI客服机器人的报价高吗?其实际费用与人工客服相比有哪些优势?

AI客服机器人的报价高吗?其实际费用与人工客服相比有哪些优势? 在数字化时代,越来越多的企业开始引入AI客服机...
客服机器人到底有哪些核心功能?AI客服系统是否支持多场景自动应答?

客服机器人到底有哪些核心功能?AI客服系统是否支持多场景自动应答?

客服机器人到底有哪些核心功能?AI客服系统是否支持多场景自动应答? 在数字化时代,客户服务已从单纯的人工响应转...