Buenos dias, amigos! This article is mostly a compilation of common sense and already published posts from my TG channel и VCI decided to gather all the information on such an important issue as reducing the number of invalid leads.
Let's start with all sorts of tricks that you need to add directly to the code of your landings, and then we'll move smoothly to the server side, where I'll show you something new and quite promising.
As the play goes on, I'm also assuming that you're collecting leads from your in-house tracker, and in the case of a lead, it's a non-valid or a take, not you put it in your status and you don't show pix to the Fabs for thanks. All right, let's go!
Preliminary steps
First things first, check all the data on your offer. We are interested in four things in particular:
- The form factor of the product. If it's a gel and you have pills on your pads, that's not good. Always customize your promotional materials to the right format!
- A list of regions to which there is no delivery. If there is such a list on the offer, be sure to take care of making a black or White-list of regions in the traffic source.
- Price - if you downloaded the procla from spays, obviously the price needs to be changed to the correct price, well! And highlight it in bold 100500m font.
- Targeting - be sure to check with the PP manager who is better at repurchasing goods. Is it men or women? 25+ or 40+? Set only the required targeting in the traffic source, at least at the test stage. Then you can experiment and expand it.
After all that, we'll get down to the technical stuff.
Browser checks
Add Required
Let's start with the basics! Each visible field on the land must have an attribute required
which will prevent the user from submitting a blank form. Usually, if you have taken a promo from a PP or merged it from spays, this attribute is already there. But if you are doing something from scratch, make sure to put it in.
Example: <input type="text" name="name" required/>
Add type="tel" and "autocomplete".
It is still common to find PPs that instead of a specially invented field type tel
utilize text
. Don't do that! Tip tel
is designed so that when a user accesses your site from a cell phone, ONLY the numeric keypad is displayed, without letters. This is much more convenient when dialing a number and leads to the fact that the number of incorrectly entered numbers is reduced.
Example: <input type="tel" name="phone" required/>
But let's better make it so that you don't have to enter anything at all!? Look carefully at the screenshots. They show a usual order form with two fields: name and phone number. Do you see the difference?
Screen 1. The name input field in the drop-down menu of tooltips is full of some garbage.
Screen 2. The phone input field is also full of unintelligible stuff.
Screen 3. The tooltip immediately shows me my name and my phone number
Screen 4. Result of tapping on the hint: ALL fields are immediately filled with valid data!
So how to make the tooltip appear like on the 3rd screen? It's all about the attribute autocomplete
. For a field with a name, you must specify autocomplete="name"
but for the phone. autocomplete="tel"
.
Complete code for all of the above items: <input type="name" required autocomplete="name" name="name"/>
<input type="tel" required autocomplete="tel" name="phone"/>
Add the minlength attribute to the fields
Obviously, in addition to the fact that all data in the form must be filled in, these data must also be of a certain length. For the field name
is at least 3 characters, for phones - from 5 or more, depending on the country.
To add a check for the field length, it needs to be given the attribute minlength
:
<input type="name" minlength="3" required name="name"/>
<input type="tel" minlength="5" required name="phone"/>
You can also check the length using the attribute pattern
as discussed below.
Add pattern, mask and intlTypeNum library
Pattern
There are several ways to check what kind of crap the user has entered into the form fields and prevent him from entering crap. And the first one is the HTML5 built-in attribute pattern
aka template.
You can use it to test almost anything, such as:
- number of required characters - useful for the name field, so that you don't enter, for example, 1 character and that's it, or vice versa, so that you don't write a whole poem in the field.
- set of available characters - for name only letters, for phone, respectively, only numbers
And here's what it would look like in code:
- Example for a field
name
: make it from two to twenty characters long and allow only Latin letters and spaces. Any values less or more than these will result in the form not being submitted.<input type="text" name="name" pattern="^[A-Z a-z]{2,20}$"/>
- Example for a field
phone
: allow only numbers and make the length exactly 9 characters.<input type="tel" name="phone" pattern="^\d{9}$"/>
"So what are all these weird symbols inside the template?" you ask. "All these slashes, brackets, etc.?". And I'm happy to answer you: "It's called regular expression. Any small-minded technician should know them and be able to use them, they are the great power!"? If you are a techie, find yourself a textbook or read a couple of articles on the Internet, and you will quickly realize that regulars are the mast hev.
Masks
For those who don't want to bother with regular expressions, there is an easier option: checking numbers by masks. A mask is the same template, but written in a much clearer language. Masks are always a connection of a third-party js-library in your lend, there are no built-in ones.
In different libraries masks are written differently, we will consider the variant for the most popular of these is InputMask.
For example, for RF license plates, you need to write a construction like this:+7-\999-999-99-99
Why is that? Because in InputMask a nine denotes ANY digit. And to make the first nine itself be exactly the number 9 and not any number, we put a slash in front of it. You don't need to know anything else about the format.
Example code that will set the above mask for all fields with type tel you you'll find here.
LibPhoneNum
A great solution to the problem of number validity checking from the great and terrible Google Inc. I wrote about it (and about masks) in detail herelet's not repeat ourselves.
Checking the lende loading speed through proxy GEO
Here's the thing: if your tracker is somewhere far away from the GEO you are driving traffic to, then when the user clicks on the "Order" button, his browser will have to wait a long time for the request to reach the request processing script. Sometimes it's a couple of seconds, and maybe it's 5-8 seconds. All this time an impatient fan of piss-creams can press the wonderful button in a frenzy. And thus increase the amount of thrash.
If you came in with proxy of the right GEO and saw the above problem, then you have 3 solutions:
- Move your tracker to the server from which this GEO is loaded much faster. This is a radical solution, but if you work closely with the selected region, and the others are not important, then it has a very good place.
- Host a landing somewhere in the neighborhood with the right GEO, and tracker connect to it via API. The solution is simpler, but still requires fiddling with the API setup + in addition, the script for sending leads should also be on the hosting GEO, which complicates the process of managing any large number of lands.
- See the next item ?
Add a script that removes the "Order" button
The idea for the script was outlined on Adam's channelIn brief, the essence is as follows: when a user clicks on the "Order" button, the button disappears and instead of it appears the text: "Wait, the request is being sent".
Thus, while sending a lead to the PP and downloading "Thank you", the user can't generate a dozen more leads.
The script itself is in the form of a macro for Keitaro is hereIf you want a pure JS version, get it from the author.
Server checks
Moving smoothly to the part where you'll need to be proficient in PHP. Validating leads on the server is a lot more fun than in the client's browser. Why? It's simple: if a user wants to nafrodit, and we don't let him do it and show him what he did wrong, you can be sure that he will choose the right phone mask, fill in the full name, in short, he will do everything so that the lead will go to the PP. Do you need this? I - definitely not. Therefore, we add checks on the server and, if something is wrong - redirect to a naked thank you without a pixel, without writing the lead to the database. tracker without sending it to the PP. And the user will not know anything about it, let him sit and idly press buttons. Easy!
Add a cookie with a phone number
The idea is as follows: each time a user leaves a request, a cookie is written to the browser that stores the phone number he entered in the form. If he tries to send the same number again, we don't send the lead to pape and don't show the "Thank you" pixel on the "Thank you" page. In general, you can do the same thing with the name.
Add cookies with the number of applications
The idea is similar to the previous one, only this time we will add a cookie to the user that counts how many requests he has left. If there are more than two (and he should be allowed to keep the other one, for he might have gagged and left the wrong number.), then we don't send the lead to PP and show the "Thank You" page without the Facebook pixel.
Here's the code from mine Keitarowhich performs the above two checks:
Process the results of sending a lead to the PP
This may come as a surprise to you, but quite a few affiliates tell you right after you send them a lead whether it's valid or not. Here are some examples, what does it look like?
One problem: different affiliate programs have different response formats, so you'll have to dig through the affiliate's docs and figure out what's what. But then you will be able to get a response immediately after sending a lead, parse it, and understand whether it is worth recording the lead in the tracker?
I have it done like this: there is a common class for the abstract entity "Partner", classes for each np inherit from it and override the response parsing method. Like:
Checking a lead against the general list of leads
If you use any tracker (e.g, Keitaro) and save the names and phone numbers of users in it, then you can make the following thing: as soon as someone leaves a new lead, you take the data of the lead and check it against your database. In general, it will be enough to check the number: if the number is already in the trackerwhy do we need another one of these?
To realize such a thing in Keitaro check the docs for the method conversions/log
+ don't forget to sample only for today to avoid overloading the tracker. Well, and see that your check does not take a lot of time, for this purpose, first get a good hosting.
Here you go approximate the code where my phone number is stored in the tag. sub_id_15
:
Checking phone numbers
The last number of our program will be, strangely enough, the same aforementioned library from Google - LibPhoneNumber. But this time we'll use its PHP implementation. Here's the demo sitewhere you can play with it, there is also a link to the repository on github.
Well, the check itself is quite simple: we specify the country and number, and the library gives out whether it is correct in its opinion or not.
CAUTION: do not implement this method thoughtlessly, otherwise you may lose normal leads. For example, according to my tests, this library works quite well with European numbers, but it is rather mediocre at detecting LatAm numbers from, say, Chile. So, before using it to its full potential, implement it just in the form of logging - record what it thinks about your traffic, and then take all the invalid leads from its point of view and check them by tracker!!
Summary
Ugh, I think that's it! It is not necessary to implement all the above solutions. First of all, the number of people who like to click 20 times on the "Order" button varies from one GEO to another, in Europe less, in Africa much more. And secondly, the ability to leave ONE repeated request for a user should be: maybe he made a mistake and entered the wrong phone number? For this purpose, by the way, it is good to show the phone number and name on the "Thank you" page, so that the user can see what he entered there. So start small, and only if you are completely fed up with these froders, start implementing everything in a row ?
I don't think I forgot to tell you anything, but if you know any other good ways to reduce the thrash, welcome in the comments, we'll complete the list together!
And Yellow Web was with you, ley in plus and see you later ?️
Привет!)
Подскажи пожалуйста, пункт «Добавляем куки с кол-вом заявок» — куда и как в keitaro его закидывать?
Пытался загуглить, смотрел мануалы у них на сайте но так и не нашел.
Вам нужно нанять фрилансера-технаря, объяснить ему задачу или дать ссылку на статью и сказать, какой пункт сделать. Насчёт куки: грубо говоря — в скрипте отправки лидов должен быть код, который ставит юзеру куки, что он отправлял заявку, а также проверяет, что если такая куки есть — то не отправлять повторную заявку.