> For the complete documentation index, see [llms.txt](https://knowledgebase.offer18.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://knowledgebase.offer18.com/zh/wang-luo/offer/yu-luo-di-ye.md).

# 预落地页

预登陆页面类似于一个中转页面，帮助用户根据其需求进入特定的落地页。它作为流量来源与广告落地页之间的链接。用于推送和原生广告的预登陆页面在提高转化率方面非常有用。

### 设置（预登陆页面）

#### 1. **优惠 » 优惠已批准**

#### 2. 选择 **优惠 » 常规**&#x20;

#### 3. 选择“**预登陆**” 来自 “**类型**” 下拉并在 “**预登陆 URL**” 下的 “**落地页**” 字段。

<pre class="language-markup" data-title="要附加到 URL 的令牌" data-overflow="wrap"><code class="lang-markup"><strong>landing_page={pre_landing}（必填）
</strong>
根据您的需求附加令牌和参数以传递数据值，您可以从下面给出的选项中选择并添加键值对。

 1. aff_click_id={aff_click_id} 
 2. sub_aff_id={sub_aff_id}
 3. aff_sub1={aff_sub1}
 4. aff_sub2={aff_sub2}
 5. aff_sub3={aff_sub3}
 6. aff_sub4={aff_sub4}
 7. aff_sub5={aff_sub5}
 8. googleaid={googleaid}
 9. deviceid={deviceid}
 10. iosidfa={iosidfa}
 11. source={source}
</code></pre>

{% code title="示例落地页" overflow="wrap" %}

```
https://example-pre-landing.com?landing_page={pre_landing}&aff_click_id={aff_click_id}&sub_aff_id={sub_aff_id}&aff_sub1={aff_sub1}&source={source}
```

{% endcode %}

<figure><img src="/files/e0e89a532edb972c7f1735dc98379e6a7484f6a1" alt=""><figcaption></figcaption></figure>

#### 4. 在优惠 URL 上附加 Offer18 令牌以向广告主传递所需值。

{% code title="联盟值令牌" overflow="wrap" %}

```
{aff_click_id}, {sub_aff_id}, {aff_sub1}, {aff_sub2}, {aff_sub3}, {aff_sub4}, {aff_sub5}, {googleaid}, {deviceid}, {iosidfa}, {source}
```

{% endcode %}

#### 5. **提交以保存更改**

***

### 联盟跟踪 URL（预登陆页面）

1. 登录联盟后台
2. **优惠 » 我的优惠（已批准） » 选择优惠**
3. 选择 **预登陆页面** 从下拉菜单中

<figure><img src="/files/ba1a33a45143ab97682af739f7354904173bc86c" alt=""><figcaption></figcaption></figure>

4\. **获取联盟** **跟踪 URL**&#x20;

***

### 创建网页（预登陆页面）

使用下面脚本创建一个网页，其 URL 与设置中使用的 URL 相同

```javascript
  <script>
    function base64_decode(r) { if ("function" == typeof this.window.atob) return atob(r); var n, t, e, i, o, f, a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", d = 0, h = 0, c = []; if (!r) return r; r += ""; do { n = (f = a.indexOf(r.charAt(d++)) << 18 | a.indexOf(r.charAt(d++)) << 12 | (i = a.indexOf(r.charAt(d++))) << 6 | (o = a.indexOf(r.charAt(d++)))) >> 16 & 255, t = f >> 8 & 255, e = 255 & f, c[h++] = 64 == i ? String.fromCharCode(n) : 64 == o ? String.fromCharCode(n, t) : String.fromCharCode(n, t, e) } while (d < r.length); return c.join("") }
    function getUrlVars() { var vars = {}; var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { vars[key] = value; }); return vars; }
    function getUrlParam(parameter) { var urlparameter = ''; if (window.location.href.indexOf(parameter) > -1) { urlparameter = getUrlVars()[parameter]; } return base64_decode(urlparameter); }
    function getQueryParam(param) { const urlParams = new URLSearchParams(window.location.search); return urlParams.get(param) ? urlParams.get(param) : ''; }
    function createQueryString(mapping) { let queryString = Object.keys(mapping).map(key => { let value = getQueryParam(key); return value ? `${mapping[key]}=${value}` : ''; }).filter(param => param !== '').join('&'); return queryString; }
    var landing_page = getUrlParam('landing_page');
    var aurl = document.getElementsByTagName('a'), ahf = aurl.length;
    var parameterMapping = { 'aff_click_id': 'aff_click_id', 'sub_aff_id': 'sub_aff_id', 'aff_sub1': 'aff_sub1', 'aff_sub2': 'aff_sub2', 'aff_sub3': 'aff_sub3', 'aff_sub4': 'aff_sub4', 'aff_sub5': 'aff_sub5', 'googleaid': 'googleaid', 'deviceid': 'deviceid', 'iosidfa': 'iosidfa', 'source': 'source' };
    var parameterString = '';
    if (Object.keys(parameterMapping).length > 0) { parameterString = createQueryString(parameterMapping); }
    while (ahf--) { if (parameterString) { aurl[ahf].setAttribute('href', `${landing_page}&${parameterString}`); } else { aurl[ahf].setAttribute('href', landing_page); } aurl[ahf].setAttribute('target', '_blank'); }
  </script>
```

***

### **测试预登陆页面**

使用下面的代码片段测试预登陆脚本

```html
<!DOCTYPE html>
<html>
<head>
<title>页面标题</title>
</head>
<body>
  <a href=""> 测试链接 1</a>
  <a href=""> 测试链接 2</a>
  <a href=""> 测试链接 3</a>
</p>
  <script>
    function base64_decode(r) { if ("function" == typeof this.window.atob) return atob(r); var n, t, e, i, o, f, a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", d = 0, h = 0, c = []; if (!r) return r; r += ""; do { n = (f = a.indexOf(r.charAt(d++)) << 18 | a.indexOf(r.charAt(d++)) << 12 | (i = a.indexOf(r.charAt(d++))) << 6 | (o = a.indexOf(r.charAt(d++)))) >> 16 & 255, t = f >> 8 & 255, e = 255 & f, c[h++] = 64 == i ? String.fromCharCode(n) : 64 == o ? String.fromCharCode(n, t) : String.fromCharCode(n, t, e) } while (d < r.length); return c.join("") }
    function getUrlVars() { var vars = {}; var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { vars[key] = value; }); return vars; }
    function getUrlParam(parameter) { var urlparameter = ''; if (window.location.href.indexOf(parameter) > -1) { urlparameter = getUrlVars()[parameter]; } return base64_decode(urlparameter); }
    function getQueryParam(param) { const urlParams = new URLSearchParams(window.location.search); return urlParams.get(param) ? urlParams.get(param) : ''; }
    function createQueryString(mapping) { let queryString = Object.keys(mapping).map(key => { let value = getQueryParam(key); return value ? `${mapping[key]}=${value}` : ''; }).filter(param => param !== '').join('&'); return queryString; }
    var landing_page = getUrlParam('landing_page');
    var aurl = document.getElementsByTagName('a'), ahf = aurl.length;
    var parameterMapping = { 'aff_click_id': 'aff_click_id', 'sub_aff_id': 'sub_aff_id', 'aff_sub1': 'aff_sub1', 'aff_sub2': 'aff_sub2', 'aff_sub3': 'aff_sub3', 'aff_sub4': 'aff_sub4', 'aff_sub5': 'aff_sub5', 'googleaid': 'googleaid', 'deviceid': 'deviceid', 'iosidfa': 'iosidfa', 'source': 'source' };
    var parameterString = '';
    if (Object.keys(parameterMapping).length > 0) { parameterString = createQueryString(parameterMapping); }
    while (ahf--) { if (parameterString) { aurl[ahf].setAttribute('href', `${landing_page}&${parameterString}`); } else { aurl[ahf].setAttribute('href', landing_page); } aurl[ahf].setAttribute('target', '_blank'); }
  </script>
  </body>
</html> 
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://knowledgebase.offer18.com/zh/wang-luo/offer/yu-luo-di-ye.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
