Unvisited and sequential rotation
How to give a returning visitor landing pages and offers they haven't received yet, or show them one after another in a set order.
By default, a stream picks a landing page and an offer at random, by shares. In the Unvisited, by weight («Непосещённые по долям») mode, a returning visitor gets a landing page or offer they haven't been given yet; in the Sequential («Последовательно») mode, they get the next one in a set order. The mode is set in the Stream settings («Настройки потока») window on the Rotation («Ротация») tab and works in streams with the Offer («Оффер»), Landing page («Лендинг») or Landing → offer funnel («Воронка ленд→оффер») action. Anyone who can edit the campaign can change it.
Selection modes
There's one mode per stream: it applies to both landing pages and offers. An item here is a landing page or offer from the stream rotation.
| Mode | New visitor | Returning visitor |
|---|---|---|
| By weight («По долям») | A random item in proportion to shares | The same: the choice is random every time, no history is kept |
| Unvisited, by weight | A random item in proportion to shares | A random item in proportion to shares among those not yet given to them. When all have been given, a new round starts: the choice is again made among all items except the one given last |
| Sequential | The first item in order | The item following the one given last time. After the last one, the first again |
By weight is the default and is described on the Rotation and split tests of landing pages and offers page.
- Landing page history and offer history are kept separately. In a funnel, the landing page and the offer are selected independently of each other.
- In the Unvisited, by weight mode, a new round doesn't start with the item given last in the previous round: on two visits in a row, the visitor gets different items. The exception is when only one item can be given.
- In the Sequential mode, every new visitor starts with the first item. A visitor who comes only once gets only that item.
Example: a funnel in the Sequential mode, two landing pages and three offers, the offer is selected before the landing page is shown.
| Visitor's visit | Landing page | Offer |
|---|---|---|
| First | First | First |
| Second | Second | Second |
| Third | First | Third |
| Fourth | Second | First |
Turn on the mode
- Open the campaign in the Campaigns («Кампании») section.
- In the stream card, click the gear button: the Stream settings window opens.
- Go to the Rotation tab.
- In the Selection mode («Режим выбора») field, select Unvisited, by weight or Sequential. The Remember visitor, hours («Запоминать посетителя, часов») field appears next to it.
- Enter how many hours to keep the visitor's history.
- In the Sequential mode, arrange the item rows with the ↑ button.
- Click Save stream («Сохранить поток»).
In these two modes, a hint is shown below the fields: “After a full cycle, a new round starts. The visitor is identified by IP and browser; visitor binding takes priority. The order is top to bottom, separately for landing pages and offers.” («После полного обхода начинается новый круг. Посетитель определяется по IP и браузеру; привязка посетителя имеет приоритет. Порядок — сверху вниз отдельно для лендингов и офферов.»)
| Field | Values | Default |
|---|---|---|
| Selection mode | By weight, Unvisited, by weight, Sequential | By weight |
| Remember visitor, hours | An integer from 1 to 720. The field is shown while Unvisited, by weight or Sequential is selected | 24 |
| The ↑ button in an item row | Shown in the Sequential mode. Moves the row up one position. Inactive in the first row of the list | — |
Item rows and shares are added the same way as for selection by weight, see Add rotation items. To go back to selection by weight, select By weight and save the stream. Saved settings start applying to traffic within about 15 seconds.
Order in the Sequential mode
- The order is set by the position of rows on the Rotation tab, top to bottom. It's counted separately among landing pages and separately among offers: a landing page row between offer rows doesn't change the offer order.
- A row added with the + Item («+ Элемент») button goes last.
- The next time you open the window, landing pages come first, then offers, each kind in its saved order.
- The stream card doesn't show the mode and order: the Rotation · A/B («Ротация · A/B») block shows items and their shares. The mode is visible on the Rotation tab.
How the tracker recognizes a visitor
A visitor is identified by IP address and User-Agent. The option in the campaign's Uniqueness («Уникальность») field doesn't affect this, unlike visitor binding.
- Each stream has its own history. A visitor who gets into another stream of the same campaign starts from scratch there.
- Two people with one IP address and the same User-Agent are one visitor for the tracker.
- If a visitor's IP address or User-Agent changes, the tracker considers them new.
If a campaign has several regular streams, a returning visitor may get into a different stream. To make them return to the same one, turn on visitor binding in the campaign with the Stream («Поток») value in the Remember («Запоминать») field.
Memory period
The Remember visitor, hours field sets how many hours the visitor's history is kept. The maximum value 720 is 30 days. Subsequent visits don't extend the period.
- Unvisited, by weight: the period is counted from the first selection in a round. When the visitor has received all items, a new round and a new period start. If the period expires earlier, all items are again considered not given, and any of them can come first, including the one given last.
- Sequential: the period is counted from the first selection, and a new round doesn't renew it. When the period expires, the queue starts from the first item, even if the round isn't complete.
What counts as given
The history records the item the tracker selected for the visitor. The tracker doesn't check whether the page opened.
Only a selection made by the mode is recorded. A fallback offer and an offer selected by weight in place of an unavailable one are not recorded. An offer skipped because of a click cap isn't considered given.
| What is selected | When it gets into the history |
|---|---|
| Landing page | On entry via the campaign link |
| Offer in a stream with the Offer action | On entry via the campaign link |
| Offer in a funnel with Before the landing page is shown · shares fixed on entry («До показа лендинга · доли фиксируются на входе») in the When to choose the offer («Когда выбрать оффер») field | On entry via the campaign link. The offer counts as given even if the visitor didn't go on from the landing page |
| Offer in a funnel with After a click on the landing page · the choice is fixed before the redirect («После клика на лендинге · выбор фиксируется перед переходом») in the When to choose the offer field | On the first click-through from the landing page via a link without an offer ID |
- Each entry via the campaign link is a new click and a new selection, including reopening the same link.
- A visitor returning after a JS challenge doesn't count as a new selection: they get the same landing page and offer.
- Repeated click-throughs from a landing page within one click lead to the same offer, see Offer pinning and link lifetime.
To record only offers the visitor actually went to from the landing page, select After a click on the landing page · the choice is fixed before the redirect in the When to choose the offer field.
Shares and share 0
| Shares of items of one kind | Unvisited, by weight | Sequential |
|---|---|---|
Greater than 0 | An item's chance among those not yet given is proportional to its share. At the start of a new round, the item given last doesn't take part in the selection; with two items, they alternate from the second round on | The share doesn't affect order or frequency: each item is given once per round |
0, while other items have more than 0 | The item isn't selected | The item is skipped in the queue |
0 for all items | All take part with equal chances | All take part, in order |
An offer with share 0 still opens via the {offer:ID} link. When it gets clicks as a fallback is described in the next section.
Paused and capped offers
- An offer whose Status («Статус») field is anything other than “active” («активен») doesn't take part in the selection. The same applies to an offer or landing page in the trash.
- An offer that has reached its daily sales cap doesn't take part in the selection while the cap is reached. The choice is made by the mode among the other offers with a share greater than
0. In such a selection, the fallback offer isn't used as a replacement, unlike selection by weight. - If the sales cap is reached for all offers with a share greater than
0, the replacement is selected as with selection by weight, see Replacement order. When there's no replacement, the visitor gets a404response. - An offer whose sale count the tracker can't read also doesn't take part in the selection. If the count can't be read for all offers with a share greater than
0, the click gets a fallback offer without caps, as with selection by weight. When there's no such offer, the visitor gets a503response. - If the offer was selected before the landing page was shown and its sales cap was reached while the visitor was on the landing page, the replacement on click-through is also selected as with selection by weight.
- The offer click cap is checked after the selection. If the selected offer has no free slot, the click goes to its fallback offer from the same stream. The selected offer's turn is used up: the history records it, not the fallback offer.
- If the stream has no fallback offer, or the fallback offers have no slots either, the offer without a slot is skipped: the selection continues by the mode in the same visitor history. The skipped offer isn't considered given; the history records the offer the visitor received. An offer with a lost counter is skipped the same way.
When an offer drops out of the selection because of its status, the trash or the sales cap, or comes back into it, a separate history is kept for the resulting set of offers, see When the history starts over. The click cap doesn't change the set: the visitor continues their queue.
When the history starts over
The history belongs to the set the selection is made from: the mode, the memory period, the participating items of one kind, their shares and order. When the set changes, a separate history is kept for it, and the visitor may again get an item they've already received.
The set changes when:
- the Selection mode or Remember visitor, hours field is changed;
- an item of this kind is added to or removed from the stream. The exception is an item with share
0while other items have a share greater than0: it doesn't take part in the selection, and the set stays the same; - an item's share is changed, including to
0or from0; - the order of rows of this kind is changed;
- an offer is paused or gets the “active” status again;
- an offer or landing page is sent to the trash, or a landing page is restored from it;
- an offer's daily sales cap is reached or freed up again.
The offer click cap doesn't change the set. An offer without a free slot is skipped in the same history, see Paused and capped offers.
The earlier history is kept until its period ends. If the set becomes the same as before, that history applies again.
While the set stays the same, the history starts over in two cases: the memory period expired, or, in the Unvisited, by weight mode, the visitor received all items that can be given. An offer without a slot in the click cap doesn't count here. After a full round, the tracker remembers which item was given last and doesn't start the new round with it; after the period expires, it remembers nothing.
Binding, offer link and caps
| What applies | How it combines with the mode |
|---|---|
| Visitor binding, with Stream in the Remember field | Only the stream is pinned. The landing page and offer are selected by the mode |
| Binding with Stream and landing page («Поток и лендинг») in the Remember field | A returning visitor gets the pinned landing page. The offer is selected by the mode |
| Binding with Whole bundle («Вся связка») in the Remember field | A returning visitor gets the pinned landing page and offer. The mode applies to them only when the pinned offer has to be replaced, see the list below the table |
An {offer:ID} link on the landing page | The visitor goes to the specified offer, see Multi-offer. The mode doesn't apply |
| Daily sales cap | Offers that reached the cap are excluded before the selection by the mode |
| Offer click cap | Checked after the selection by the mode |
- A visitor's first visit goes through selection by the mode. Binding pins what they received.
- A pinned item and an offer from an
{offer:ID}link aren't recorded in the history. - If the pinned landing page is no longer in the rotation, the replacement is selected by weight, not by the mode. A pinned offer selected on entry is replaced the same way: in a stream with the Offer action and in a funnel with the Before the landing page is shown · shares fixed on entry option.
- In a funnel with the After a click on the landing page · the choice is fixed before the redirect option, a replacement for a pinned offer that is no longer in the rotation is selected on click-through by the mode and recorded in the history.
- A pinned offer that reached its click cap is replaced by its fallback offer from this stream, and without a fallback, by an offer selected by the mode among the others.
- The binding period and the memory period are set separately: the first in the campaign, the second in the stream.
- How repeated entries via the campaign link, returns after a JS challenge and repeated click-throughs from the landing page are counted is covered in What counts as given.
Copies, templates and shared funnels
The mode, the memory period and the item order carry over together with the stream.
| Action | What happens to the settings |
|---|---|
| The Copy («Копия») button in the stream card | The stream copy gets the same mode, period and order |
| The Copy («Копировать») button in the campaign list | Streams of the campaign copy get the same mode, period and order |
| Stream template and JSON file | The mode, period and order are saved in the template and in the file. In a draft from a template, the Rotation tab is already filled with them |
| A shared funnel version | The mode, period and order are saved in the version together with landing pages, offers and shares. When the version is applied, they replace the stream settings |
- Visitor history doesn't carry over: for a stream copy and a stream from a template, it starts from scratch.
- In the Now («Сейчас») and After applying version … («После применения версии …») comparison before applying a shared funnel version, the mode is shown as the line “Selection mode: …” («Режим выбора: …»). For the Unvisited, by weight and Sequential modes, it also shows the memory period. In the Sequential mode, landing pages and offers are listed in the order they're cycled through and numbered, see What the comparison shows.
What Check stream shows
The Check stream («Проверить поток») button opens the Stream selection check («Проверка выбора потока») window. It shows which stream a visitor with the given parameters would get. In any mode, the check doesn't show which landing page or offer will be selected inside the stream. It neither reads nor changes the visitor history.
The word “rotation” in the line above the result table, for example “Campaign: active · rotation: weight.” («Кампания: active · ротация: weight.»), refers to the choice between regular streams, not to the Selection mode field. More on the Stream selection check page.
Limits
- One mode per stream. You can't set different modes for landing pages and offers of one stream.
- Remember visitor, hours is an integer from
1to720. - In the Unvisited, by weight and Sequential modes, a stream has no more than 200 landing pages and no more than 200 offers. A stream with more isn't saved, either from the Stream settings window or through the API.
- In the By weight mode, these limits don't apply: a stream with more than 200 landing pages or more than 200 offers is saved, and the memory period isn't checked.
- A stream with more than 200 landing pages or more than 200 offers isn't saved to a stream template or to a shared funnel version in any mode. A shared funnel version also checks the memory period in any mode.
- In the Unvisited, by weight mode, a share greater than
100000is counted as100000. - The history stores the tracker's selection, not a page view, and is kept by IP address and User-Agent.
- While the tracker can't read or write the history, a stream in the Unvisited, by weight and Sequential modes answers the visitor with
503. It doesn't switch to selection by weight by itself.
Setup through the API and in a JSON file
In the stream object and in a template file, the mode is stored in action_payload, in the target_rotation object.
| Field | Type | Description |
|---|---|---|
mode | string | weighted is By weight, unvisited is Unvisited, by weight, sequential is Sequential. Default: weighted |
hours | integer | The memory period in hours, from 1 to 720. Default: 24. The limits are checked in the unvisited and sequential modes. In the weighted mode, the value isn't used and any integer is accepted |
offer_order | array of strings | IDs of the stream's offers in the order they're cycled through, without repeats. Up to 200 in the unvisited and sequential modes |
lander_order | array of strings | IDs of the stream's landing pages in the order they're cycled through, without repeats. Up to 200 in the unvisited and sequential modes |
- Stream items that aren't in the order list come after the listed ones, in ascending ID order.
- Other keys in
target_rotationaren't accepted. - When a stream is changed,
action_payloadis replaced as a whole. If you pass it withouttarget_rotation, the stream goes back to the By weight mode.
Errors come with code 422 and code = validation; the reason is in message:
| Message | Cause |
|---|---|
| “unknown rotation mode” («неизвестный режим ротации») | mode holds something other than weighted, unvisited or sequential |
| “rotation period: 1–720 hours” («срок ротации: 1–720 часов») | The mode isn't weighted, and hours holds a number less than 1 or greater than 720 |
| “no more than 200 rotation targets” («не более 200 целей ротации») | The mode isn't weighted, and offer_order or lander_order has more than 200 IDs |
| “duplicate or invalid rotation target” («повтор или неверная цель ротации») | The order list has a repeat, an empty string or an ID longer than 64 characters, in any mode |
| “rotation order contains a target outside the stream” («порядок ротации содержит цель вне потока») | The mode isn't weighted, and the order list has an offer or landing page that isn't in the stream's offers or landers |
| “no more than 200 smart rotation targets” («не более 200 целей smart rotation») | The mode isn't weighted, and the stream has more than 200 offers or more than 200 landing pages |
The text starts with json: | target_rotation has an extra key or a value of the wrong type, for example a fractional number in hours |
Check
- Save the stream and wait about 15 seconds.
- Open the campaign link several times in a row in the same browser.
- In the stream card, click the clicks · uniques («клики · уники») counter: the statistics of this stream open.
- Go to the Click log («Лог кликов») tab. Clicks go from newest to oldest.
- Find your clicks by the IP column and compare the values in the Offer column.
- Click the row of a click: the landing page is shown in the Landing page line of the ID / Data («ID / Данные») block.
In the Unvisited, by weight mode, the landing page and offer don't repeat until all items of that kind have been given or the set changes, see When the history starts over. At the round boundary too: two visits in a row give different items if at least two can be given. In the Sequential mode, they go in the order of rows on the Rotation tab.
If the offer is selected after a click on the landing page, the Offer column fills in after the click-through from the landing page. If binding with the Stream and landing page value is on in the campaign, repeat visits get the pinned landing page, and with the Whole bundle value, the pinned landing page and offer.
Troubleshooting
If the window didn't close after you clicked Save stream, the stream wasn't saved. The error text is shown at the top of the campaign page, under the window.
“rotation period: 1–720 hours”
This message («срок ротации: 1–720 часов») means Unvisited, by weight or Sequential is selected, and the Remember visitor, hours field is empty or holds a number less than 1 or greater than 720. Enter an integer from 1 to 720 and save the stream.
While the Rotation tab is open, a number less than 1, greater than 720 or fractional prevents the form from being submitted: the browser shows a hint by the field.
In the By weight mode, the period isn't checked: the field is hidden, and the stream is saved with any integer in it. In this mode, the message appears only when you save the stream to a shared funnel: its version checks the period in any mode. Select Unvisited, by weight, fix the number, switch back to By weight, save the stream and repeat saving to the funnel.
A fractional number with another tab open or in the By weight mode gives a different error: its text starts with json: cannot unmarshal number. Fix the number the same way.
“no more than 200 rotation targets”
This message («не более 200 целей ротации») means Unvisited, by weight or Sequential is selected, and the stream has more than 200 landing pages or more than 200 offers. Delete extra rows on the Rotation tab, split the items across several streams or select the By weight mode: it has no such limit.
The visitor got the same landing page or offer again
Possible causes:
- in the Unvisited, by weight mode, a new round started: all items had already been given. In this case, one item is given on two visits in a row only when it's the only one that can be given, for example, when the other offers have no slot in their click cap;
- the period from the Remember visitor, hours field expired;
- the mode, period, set of items, their shares or order changed, see When the history starts over;
- the visitor's IP address or User-Agent changed, or they got into another campaign stream;
- the landing page or offer is pinned by visitor binding;
- the visitor followed an
{offer:ID}link; - the offer reached its click cap, and when its turn comes, the visitor gets the fallback offer. If the fallback offer itself is in the rotation with a share greater than
0, it's given twice per round. An offer set as the fallback for two offers without slots at once repeats the same way.
An item is never given
Possible causes:
- the item has share
0, while other items of the same kind have a share greater than0; - the offer's Status field is anything other than “active”, or its daily sales cap or click cap is reached;
- in the Sequential mode, visitors come once each, and each gets the first item;
- the visitor gets the landing page or offer pinned by binding every time.
The stream answers 503
The tracker couldn't read or write the visitor history. The same response comes when the tracker couldn't read an offer's cap counter and found no other offer for the click in the stream, see Paused and capped offers. The click is recorded in the statistics without a landing page and offer and doesn't go to another stream. The exception is a stream with its own click caps: while the tracker can't read their counter either, the click goes to another matching stream, and if there isn't one, the visitor gets 503 and the click isn't recorded in the statistics. Open System status and check the redis card. 503 responses on click-through from a landing page are described on the From landing page to offer and multi-offer page.