Documentation sections

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.

ModeNew visitorReturning visitor
By weight («По долям»)A random item in proportion to sharesThe same: the choice is random every time, no history is kept
Unvisited, by weightA random item in proportion to sharesA 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
SequentialThe first item in orderThe 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 visitLanding pageOffer
FirstFirstFirst
SecondSecondSecond
ThirdFirstThird
FourthSecondFirst

Turn on the mode

  1. Open the campaign in the Campaigns («Кампании») section.
  2. In the stream card, click the gear button: the Stream settings window opens.
  3. Go to the Rotation tab.
  4. In the Selection mode («Режим выбора») field, select Unvisited, by weight or Sequential. The Remember visitor, hours («Запоминать посетителя, часов») field appears next to it.
  5. Enter how many hours to keep the visitor's history.
  6. In the Sequential mode, arrange the item rows with the ↑ button.
  7. 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 и браузеру; привязка посетителя имеет приоритет. Порядок — сверху вниз отдельно для лендингов и офферов.»)

FieldValuesDefault
Selection modeBy weight, Unvisited, by weight, SequentialBy weight
Remember visitor, hoursAn integer from 1 to 720. The field is shown while Unvisited, by weight or Sequential is selected24
The ↑ button in an item rowShown 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.
Tip.

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 selectedWhen it gets into the history
Landing pageOn entry via the campaign link
Offer in a stream with the Offer actionOn 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 («Когда выбрать оффер») fieldOn 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 fieldOn 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.
Tip.

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 kindUnvisited, by weightSequential
Greater than 0An 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 onThe share doesn't affect order or frequency: each item is given once per round
0, while other items have more than 0The item isn't selectedThe item is skipped in the queue
0 for all itemsAll take part with equal chancesAll 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 a 404 response.
  • 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 a 503 response.
  • 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 0 while other items have a share greater than 0: it doesn't take part in the selection, and the set stays the same;
  • an item's share is changed, including to 0 or from 0;
  • 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 appliesHow it combines with the mode
Visitor binding, with Stream in the Remember fieldOnly the stream is pinned. The landing page and offer are selected by the mode
Binding with Stream and landing page («Поток и лендинг») in the Remember fieldA returning visitor gets the pinned landing page. The offer is selected by the mode
Binding with Whole bundle («Вся связка») in the Remember fieldA 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 pageThe visitor goes to the specified offer, see Multi-offer. The mode doesn't apply
Daily sales capOffers that reached the cap are excluded before the selection by the mode
Offer click capChecked 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.

ActionWhat happens to the settings
The Copy («Копия») button in the stream cardThe stream copy gets the same mode, period and order
The Copy («Копировать») button in the campaign listStreams of the campaign copy get the same mode, period and order
Stream template and JSON fileThe 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 versionThe 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 1 to 720.
  • 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 100000 is counted as 100000.
  • 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.

FieldTypeDescription
modestringweighted is By weight, unvisited is Unvisited, by weight, sequential is Sequential. Default: weighted
hoursintegerThe 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_orderarray of stringsIDs of the stream's offers in the order they're cycled through, without repeats. Up to 200 in the unvisited and sequential modes
lander_orderarray of stringsIDs 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_rotation aren't accepted.
  • When a stream is changed, action_payload is replaced as a whole. If you pass it without target_rotation, the stream goes back to the By weight mode.

Errors come with code 422 and code = validation; the reason is in message:

MessageCause
“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

  1. Save the stream and wait about 15 seconds.
  2. Open the campaign link several times in a row in the same browser.
  3. In the stream card, click the clicks · uniques («клики · уники») counter: the statistics of this stream open.
  4. Go to the Click log («Лог кликов») tab. Clicks go from newest to oldest.
  5. Find your clicks by the IP column and compare the values in the Offer column.
  6. 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 than 0;
  • 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.

Updated Need help? ↗