Online customers can abandon their shopping cart for many reasons. As a store owner with access to Google Analytics there is information available about some of the reasons.
FunnelQL provides a solution to help customers complete their order. Pro-active communication, smart tricks with the design etc. Everything is possible with FunnelQL.
There is much to do about 'cart abandonment'. Experts estimate that 2 to 4 trillion USD per year is lost by abandoned shopping carts.
www.annexcloud.com/blog/31-shopping-cart-abandonment-statistics-for-2018/
- It’s costing a lot of money: Abandonment costs e-marketers about 2 to 4 trillion USD per year. Given the large economic impact, shopping cart abandonment solutions are becoming a priority for e-commerce marketers.
- It will get worse: Experts agree that shopping cart abandonment is on the rise.
FunnelQL can be an ideal solution and can help webshops recover more than a trillion USD in lost revenue.
A javascript library for working with Funnel Query Language. The library enables to perform queries on the chronological context of activity of a website visitor for the purpose of Conversion Funnel Optimization.
The language and library are intended to be easy to use to unlock Conversion Funnel Optimization for users with in-depth insights into visitors/customers such as webshop owners and internet marketing specialists.
The package is available on NPM: npm install funnelql.
Include the library in the HTML document. The library requires a Web Worker that can be included as a inline blob or that will require a separate web worker file.
<script src="/funnelql.js" async></script>The script will automatically load /funnelql-worker.js on the basis of the path of the funnelql.js file. You can define a custom location via window['funnelql-worker'] = 'path/to/funnelql-worker.js';.
<script src="/funnelql+inline-worker.js" async></script>To save additional bytes you can use the .nodebug.js version of each script that does not include debug and performance timing functionality.
Working with Funnel Query Language consists of two parts:
- writing the funnel by registering tags during the visit of a website visitor.
- querying the funnel to perform actions based on a callback or promise (e.g. a Push Notification).
Funnel Query Language is based on a IndexedDB database that can persist or expire with the browser session. Persistence enables to target returning visitors or visitors that visited on a specific day or time.
$FQL.init({
expire: 'session'
});| Option | Description | Default |
|---|---|---|
expire |
Database expiration. | session (could be never or a time in seconds) |
The Funnel data-set is based on tags that can be set with the following method:
$FQL.tag('tag-name');During navigation, URLs are automatically registered. The following method can be used to manually register a navigation:
$FQL.nav('URL or path/');The following method can be used to perform a query based on a Funnel Query string or JSON:
$FQL.query( "funnel query" ).then(function(result) {
// result = true/false (boolean)
});The following method can be used to parse a Funnel Query string into JSON:
$FQL.parse( "funnel query" ).then(function(json) {
// json
});The following method can be used to perform an action as soon as a Funnel Query string or JSON matches the path of the visitor:
$FQL.on( "funnel query" ).then(function(result) {
// result = true
});Alternatively, the on method accepts a callback instead of a promise and multiple queries as a Array.
$FQL.on( [ "funnel query 1", "funnel query 2" ], function(result, fql) {
// result = true
// fql = funnel query string
});The library can provide detailed debug information including Performance API timings in the browser console. The following method can be used to enable debug mode or to retrieve it's status.
$FQL.debug(true);How to construct a Funnel Query?
Funnel Query Language provides several methods for querying the registered funnel data-set.
- Tag (JSON string)
- URL (
URL) - Path (
PATH) - Tag Count (
COUNT) - Date or time (
SINCE) - Custom function (
FN)
A tag can be queried using a JSON string "tag-name" or using a Regular Expression method REGEX(/tag-name/i).
"tag-x" + REGEX(/tag-name-(\d+)?/i) + "tag-y"An URL can be queried using the method URL("url") or using a Regular Expression URL( REGEX(/tag-name/i) ).
URL("url/to/match") + URL( REGEX(/url\.(html|js|css)/i) )The PATH query enables to add chronological context to a query. The path method starts a sub query that can contain a tag, url, count or function query.
The path query provides operators to define the chronological context. The path sequence can be based on URL navigation position or time.
| Option | Description |
|---|---|
> |
Matches in consecutive query should follow previous query's URL position. |
>= |
Matches in consecutive query should match or follow previous query's URL position. |
|> |
Matches in consecutive query should be on same URL position as previous query's URL position. |
>10 |
Matches in consecutive query should be at least 10 URL positions from previous query's URL position. |
>10m |
Matches in consecutive query should be at least 10 minutes from previous query's event position. |
<10m |
Matches in consecutive query should be within 10 minutes from previous query's event position. |
PATH( "tag-x" > "tag-y" )The following example matches when tag-y follows within 1 minute after tag-x.
PATH( "tag-x" <1m "tag-y" )The following example matches when the visitor visits an URL containing cart or other-page within 5 navigations after having visited product-1.html.
PATH( URL("product-1.html") <5 URL( REGEX(/(cart|other-page)/) ) )The SINCE query enables to add chronological context to a query. The since method starts a sub query that can contain a tag, url, count or function query.
The first parameter of the SINCE method can contain a time reference, e.g. 1s (1 second) or 10m (10 minutes) or a date in format yyyy-MM-ddThh:mm.
SINCE( 1m, "tag-x" )SINCE( 2018-09-02T12:10, ( "tag-x" + "tag-y" ) )A COUNT query enables to query based on number of occurrences of a tag.
The first parameter of the COUNT method contains the tag as JSON string or as REGEX query. The query supports the operators >, <, =, <=, >= followed by a number.
COUNT( "tag-x" > 1 )A FN query enables to perform a custom query using a javascript function. Optional conditions from a parent query are added as a extra argument.
FN( "function-name", "argument-1", "argument-2" )
