Skip navigation
All Places > Products > Blog > 2019 > November
2019

When an HTML document requests additional HTML content over Ajax (XMLHttpRequest), the browser doesn’t run the code inside <script> tags in the response.[1]

 

This is so even when the response is an otherwise-living HTML document.[2] The innards of <script> tags are still downloaded, of course, but they’re neutralized as raw text (e.g. source code) and not executed.

 

Why this matters for SPAs

Some classic multi-page apps can be (relatively) easily upgraded to (theoretically) faster single-page apps (SPAs) just by changing how links work.

 

Instead of reloading a whole new page on link click, the initial page stays put, while the next page’s URL is fetched via a background Ajax call. Then part of the main page is replaced by part of the HTML response. It’s far easier on the network, ideally easier on CPU, and faster for the end user.

 

But this change comes at a price. Previously working JS that set up form behaviors, dynamic styles, etc. won’t run when a page serves merely as a passive source of HTML markup.

 

If an Ajax framework so chooses, it might find all the scripts in the response, copy out the inner text of each, and reinject it inside new <script> elements.[3] Then and only then will the code be executed.

 

But the strictest web frameworks don’t allow you to “resuscitate” scripts in this way (even when you control both the outer page and the inner Ajax-fetched page, so there’s no security risk). Squarespace’s proprietary CMS framework is one of these strict ones.

 

New Squarespace templates are Ajax-powered SPAs

In the newest gen of Squarespace templates (note: my sole SS site is on a very old version and still looks fine, thank you very much!) such as Brine, your entire site is actually a single page.

 

Once that initial page is loaded, other would-be “pages” are actually HTML fragments dropped inside a placeholder “dynamic content” element. (A full HTML page is fetched under the hood using Ajax, then the interesting parts are clipped out and injected into the placeholder, replacing its previous contents.)

 

As you follow nav links like Shop or Blog and click further into Shop products and Blog posts, you’re doing all that within the same main document:

 

 

If you refresh your browser, the main document does reload once, then the process continues: new “pages” are again Ajax-injected as you click, keeping the same main doc. (The browser URL does change, so to those unfamiliar with the History API, it might look like a new page loaded. But nope, watch the F12 Network tab and you’ll see it’s all Ajax.)

 

So Squarespace pages serve in two capacities:

 

(1) They can serve as an active main document — if you link to them from a Marketo email, hit Refresh, paste them into your browser and hit Enter, etc. — and in these cases they will run your header or footer JavaScript one time, on page load.

(2) But they can also serve merely as passive sources of HTML content, fetched dynamically into the main document. In this case, they’ll replace the page’s dynamic content, including <div>s and <span>s and <img>s and all that stuff, but won’t run any code.

 

Therefore, if you have JavaScript on your page, you need to make sure that it’s ready for both cases.

 

You can’t skip the more traditional case (1). Synchronous <script> or <script src>, external <script src> that’s asynchronous and/or deferred, code that adds listeners for load or DOMContentLoaded — all must run on a traditional page load, because there’s no special event for non-Ajax-created content.[4]

 

But your code must also account for case (2). It’ll run only once during main document load, so during that run it must add an event listener function that’ll be triggered every time a new “page” is loaded via Ajax. The listener won’t always find something to do, but it needs to always check for possible tasks, like adding a Marketo form if newly injected content matches a certain pattern.

 

Squarespace insiders apparently use the jargon “Ajax-enabled code” to describe JavaScript built to handle both cases. Yes, sure it’s “Ajax-enabled,” but such a generic term doesn’t help a developer. A clearer way to put it is: your <script> may run only once per browser session, so it also needs to set up listeners for ongoing changes to the HTML DOM after that first run.

 

Adapting the Marketo form embed

The standard Forms 2.0 embed code is like so:

 

<script src="//pages.example.com/js/forms2/js/forms2.min.js"></script>
<form id="mktoForm_9999"></form>
<script>
MktoForms2.loadForm("//pages.example.com", "123-ABC-456", 9999);
</script>

 

Straightforwardly, the embed:

  • loads the common Forms 2.0 JS library
  • creates an easily findable empty <form> element
  • runs loadForm, which downloads the form descriptor from Marketo, creates the initial contents of the <form>, and sets up all the JS event handlers for validation and Visibility Rules and all that jazz

 

Understandably, the embed code expects to run synchronously, as part of a main document’s (script-enabled!) page load. Its goal is to get the form into the page as quickly as possible (the form being the most important part of a landing page) so it doesn’t include any extra logic. It rightly remains neutral, as it couldn’t fit all manner of unpredictable embedding situations.

 

But clearly the default embed code won’t function on a Squarespace page when that page falls into case (2) above. When the “page” is merely an Ajax-injected block of HTML, the empty <form> element would be rendered (for what that’s worth) but neither top nor bottom <script> would be executed. So there would be no Marketo form.

 

So we need to get smarter. We need JS that:

 

  • Loads the Forms 2.0 JS library — as there’s no reason to redundantly load this static JS — to create the global MktoForms2 object and hold it in reserve, even if the current view isn’t supposed to have a form.
  • Seeks in the current HTML for a recognized parent element. It could be anything, just wherever you want to place the form. For example, if you want every blog post to have a newsletter signup form at the top, see if the page is in “Single Blog Item” mode and find the <article> element on that page.
    • If there’s no matching parent element, don’t do anything for now.
    • If there’s a form-worthy parent element, check to see if it already has a <form> inside (from earlier navigation). If it’s already there, don’t do anything for now.
    • If there’s a parent, but no form yet, inject the <form> using standard DOM createElement, then run loadForm().
  • Adds an event listener to run itself again when there’s new page content. This is the key to being Squarespace-aware. By listening for new “pages” to be loaded via Ajax, we automatically re-check if the parent element has come into view, and inject the form inside it if applicable.

 

The code

For this demo, I wanted to display a Marketo form at the top of every Blog item (not trying to win any design awards here!):

 

 

So first I determined the CSS selector for the parent HTML element, the first match for "article.BlogItem" in Squarespace’s single-Blog-item view:

 

Then added this code to the global Footer (the surrounding <script> tags are required) under Settings » Advanced » Code Injection:

<script>
(function(){

var instanceURL = "//pages.example.com",
munchkinId = "ABC-123-456",
formid = 9999,
parentContainer = "article.BlogItem", // where the form goes
formPositionBefore = true, // put <form> :before other content in parent
pathInfoField = "SquarespaceSubPage"; // hidden field to pass SS sub-page


/* -- NO NEED TO TOUCH BELOW THIS LINE! -- */

var mktoFormsJS = document.createElement("script");
mktoFormsJS.src = instanceURL + "/js/forms2/js/forms2.min.js";
mktoFormsJS.addEventListener("load", function(e){
// check on initial full page load
injectMktoForm();
// recheck on Ajax "page" load
window.addEventListener("mercury:load", injectMktoForm);
MktoForms2.whenReady(function(form){
var fieldsObj = {};
fieldsObj[subPageInfoField] = document.location.pathname;
form.addHiddenFields(fieldsObj);
});
});
document.head.appendChild(mktoFormsJS);

function injectMktoForm(e){
var parentsVisible = document.querySelectorAll(parentContainer),
formVisible = document.querySelector("form#mktoForm_" + formid + ":not(:empty)");

// expect only one eligible parent for simplicity
if ( parentsVisible.length != 1 || formVisible ) {
return;
}

var mktoFormParent = parentsVisible[0],
mktoFormEl = document.createElement("form");

mktoFormEl.id = "mktoForm_" + formid;
mktoFormParent.insertBefore( mktoFormEl, formPositionBefore ? mktoFormParent.firstChild : null );
MktoForms2.loadForm(instanceURL,munchkinId,formid);
}

})();
</script>

 

As you can see, the code assumes you have a single Marketo form that goes in a consistent page location in Squarespace. You can extend the code greatly, to deal with multiple possible parents and multiple form IDs, but the core logic remains the same.

 

One extra frill

You may wonder about the JS variable pathInfoField. It’s optional, but you can set it to a Marketo form field name. The code will add a corresponding hidden field, set to the URL path at the time of form submission:

 

 

This aids in building Smart Campaign filters. You see, because of the SPA architecture, the Referrer property of each Filled Out Form activity is the last main document — that is, the last real Squarespace page, not the Ajax-injected “page” they’re currently viewing — so it’s not a fine-grained constraint.

 

It’s possible to hack harder so the sub-page appears as the Referrer, but that’s complex enough that it’d have to have another post of its own.

 

 

 


NOTES

[1] As I’m ever curious (and hope you are too)  this is the exact section of the XMLHttpRequest standard that specifies that scripts must be neutralized:

 

[2] That is, if you pass contentType="document", you get a fully parsed HTML Document object, but the <script> tags are still disabled.

 

[3] Or, less securely but still effectively, eval() it.

 

[4] A “content loaded via any method” custom event could always fire, for consistency – it would be equivalent to DOMContentLoaded in the case of the initial pageview – but in Squarespace’s case it doesn’t.

Hello Marketing Nation,

 

Thanks for tuning into the second edition of our limited Sneak Preview series, where we preview all the exciting changes coming to Community in mid-December January 2020. Today, we’ll be discussing all search related improvements - please note that these designs are not final and may change prior to release. Marketing Nation Community’s new search capabilities will include:

 

Universal Search: Suppose you were on Community browsing for best practices on Web Personalization. You’re able to find some content, but it’s not the exact information you’re looking for, so then you visit Marketo Product Docs, Knowledge Base, Help Center…

 

Wouldn’t it be great if there was a combined search for all things Marketo? Well, now there is! With a newly integrated universal search engine, you’ll be able to perform keyword searches across all Marketo properties, including: Marketing Nation Community, Marketo Product Docs, and the Marketo Help Center.

 

New Search Menu: Of course, not everyone is interested in searching across EVERY Marketo property, all the time. We’ve built a robust search menu so you can easily toggle which platforms and asset types you’d like to display so that searching is always a breeze.

 

searchfacets

 

Improved Recommended Content: In the months following our transition, our new search engine will start anonymously analyzing user page view history. This data does not use any personal information and will only be used to generate models that return recommendations by comparing a user’s current navigation pattern with other user patterns in the past.

 

Recommendations are made based on the number of user visits – so the more content that is clicked on, the better the recommendations become. Our goal is to better recommend community content to you in a confidential manner, which will hopefully provide you a more holistic view on the topics you’re most interested in!

 

Better Search Suggestions: Search suggestions, when done correctly, vastly improve search user experience by reducing the amount of time spent scrolling through search results. With our new search engine, query suggestions will utilize relevancy scores, query frequency, performance, and the degree of character matching to provide accurate suggestions for your questions.

 

querysuggestions

 

Grouped Search Results: In our quest to provide a better search experience, we wanted to ensure that search results were presented to you in an organized manner. We’ve implemented result folding, which will display logical parent-child relationships for search results. This way, when your search query returns multiple results from the same conversation thread, all related child results will be grouped in a way that makes it easy to distinguish the parent post from its subsequent replies.

  

foldedsearchresults

 

That wraps up our second Sneak Preview! I hope you are as excited as I am about these search improvements – coming soon to the Community you know and love! Stay tuned for our next week's Sneak Preview, where we'll cover all things Support. If you have any questions or concerns, please comment in the section below or reach out to me at jonchen@adobe.com.

 

If you haven't checked out our first Sneak Preview on platform and UI improvements, you can read it here!

Some small signals from end users stressing some can be disproportionately meaningful.[1] One such signal: that they started to fill out a form, so you can compare/intersect with people who eventually submitted the form.

 

The delta between the 2 is, of course, people who were distracted/discouraged/disengaged (or, in the interest of completeness, people who couldn’t submit the form due to forces outside their control).

 

Of course, we need to define our terms.

 

Does “started” mean “focused – either by clicking, tapping, or tabbing – a visible form field”?

 

Or does “started” mean “changed a value” in a visible form field? This definition might seem more exact at first, but the problems are (a) there’s no need for someone to change a value in order to submit a form – remember Pre-Fill – and (b) there’s no single DOM event that can account for all types of net changes, making the accompanying JavaScript very complex.

 

There are other directions you can take with “started,” and all manner of JS hooks you can build (veering quickly into way-too-much-to-be-useful). In a later post, I may feature some of those takes. But today I’m going to stick with the simple definition: Did someone move focus to the form?

 

Here’s how that’s done:

MktoForms2.whenReady(function(form){
var formEl = form.getFormElem()[0],
formId = form.getId();

formEl.addEventListener("focus", logFormStart, true);

function logFormStart(e){
formEl.removeEventListener("focus", logFormStart, true);
Munchkin.munchkinFunction("visitWebPage",{
"url" : document.location.pathname + "#!/inPage/startedForm/" + formId
});
}
});

 

Then you’ll see a hit one supplementary hit per pageview, naturally in the Activity Log:

 

 

/startedForm also logs if they submit the form without touching any fields, because clicking Submit also fires a focus event. (This is A Good Thing.)

 

Note the hit will stay in the Anonymous Activity Log if the person never converts, but moves to the standard (Known Lead) Log after their session is associated. As with all Visit Web Page activities, there’s ongoing backfill.

 

I’ll leave it to you to come up with meaningful Smart Lists using this info.

 

Why log Visit Web Page instead of Click Link?

Because Munchkin clickLink blocks the browser UI thread. And if you don’t know what that is: trust me, it’s A Bad Thing.

 

I’d go far as to say all custom Munchkin code that uses clickLink for in-page events (non-unloading events) instead of visitWebPage is lowkey broken – admittedly including some of my own older code. Someday I’ll get to a blog post specifically about this, but for now: trust me.

 

 


 

 

NOTES

[1] I feel strongly that logging every minor-to-meaningless page interaction is wrong. That not only creates chaff on the server side, it’s also disrespectful to users with low-quality connections. I’m in a big city, but still stuck on slow DSL, people!

 

In addition, Munchkin’s append-only logic is particularly ill-suited for storing a continuous spray of superseding events. The proper back end for that is one that can consolidate superseding events into one. Example: video tracking. If someone watched 60s of a video, they also watched 30s, so only the superseding value should be stored. Of course, I still use Munchkin to log YouTube plays... but I know it’s wrong in the grand scheme.

Hello Marketing Nation,

 

With 2020 just around the corner, we wanted to give you a peek at some changes that are coming to the Marketing Nation Community. This post is the first of a series of posts that will detail all improvements we have planned, including significant changes to the design, search capabilities, navigation structure, gamification, and more!

 

As usual, these changes were reviewed in close collaboration with several of you - thanks to everyone who participated. We hope that these improvements make the Community easier to navigate, more organized, and most importantly, more fun!

 

Without further ado, here’s your first sneak preview of the upcoming Community changes. Please note that these designs are not final and may change prior to release. All improvements will be rolled out mid-December 2019 January 2020:

 

Future Marketing Nation Community Home Page

 

Future Marketing Nation Community Feed

 

Here's some additional context for the design changes above:

 

A Completely Redesigned Community Interface

 

  • Quick access to search bar: Search is important – we know that it’s the first thing most of you look for when visiting the Community. In our new Community, the search bar has been magnified to make it even easier to access.
  • Lighter dropdown navigation structure: Keeping it simple! We’ve changed the navigation bar to drop down automatically and hyperlinked key areas in our Community so that you can visit more places with less clicking.
  • Cleaner forums interface: Notice anything different about the main page? We have significantly changed our Community interface for a better browsing experience. All of our pages have been re-designed with an improved forum layout, more visual iconography, and improved font.

 

Upcoming Adjustments to Community Structure

 

  • Subscriptions: Though the move to the new Khoros platform comes with a collection of very exciting improvements, unfortunately user subscriptions will not be carried over. This means that bookmarks, subscriptions to threads and places, inbox messages, and friend connections will be erased during the migration.

    If you have any content in your inbox and/or connections that are crucial to you, please take precautionary steps to save your subscriptions and who you’re following to ensure that they are not lost in the migration. Note that only the content in your INBOX will be erased – the content you previously followed and/or posted will still remain and be searchable on Community.
  • Ideas: As many of you are aware, there are various development stages associated with an idea in the Ideas Space of Community (13 to be exact!). Though we intended for these labels to add transparency to the progress of an idea, having too many stages makes submitting an idea more confusing than it needs to be.
    Moving forward, all ideas stages will be consolidated in the following buckets: 
    • Stage 1: Under Review
      • Stage 1a: No Plans to Build
      • Stage 1b: Planned for Build
      • Stage 1c: Already Have It
    • Stage 2: In Process
    • Stage 3: In Production
  • Labels: What were previously known as Category Folders (Marketo-defined tags) will be known as “Labels” moving forward.
  • Events and Polls: Khoros does not support certain Jive interaction styles. As a result, polls will not be migrated over and events will be migrated over as regular discussions/questions.
  • Restructuring Our Community: We took this opportunity to reorganize select areas in our community where we felt were redundant or misplaced. The following areas have been reorganized:
    • The Japan Products Space will be consolidated into the Japan MUG.
    • The Japan Partners subspace will move to the Partners category.
    • All Champion-related content will be located in the Champion Program category (blogs, discussions, and documents).
    • All blogs by Marketo Employees will be placed in “Employee Blogs” moving forward.
    • All “discussion” posts will be consolidated as questions.

 

Please keep in mind that consolidating or moving spaces or content will only affect the location of content. It will NOT result in deletion of posts or reset group permissions.

 

That’s it for this week’s Community Sneak Preview! I hope you're as excited as I am for the upcoming changes. As always, please reach out to me at jonchen@adobe.com if you have any questions, or just comment in the section below. You can also check out our next Sneak Preview here, where we’ve covered all improvements coming to Search.

While you should be loading embedded forms from your Marketo LP domain, it turns out just changing the URL is not enough.

 

Using a non-Marketo-owned domain to load forms2.min.js and call loadForm() seems to avoid collateral damage from Tracking Protection (Firefox’s built-in feature or the equivalent plugin for another browser). The form will at least show up on the page if you do that.

 

But – I’m sure you will be dismayed to learn – the form still won’t post under TP! You also need to upload a file to Design Studio and add a tiny bit of JavaScript. Then and only then are you good to go.

 

First, download this file:

 

marketo-xdframe-relative.html

 

(Note: the Marketo Nation site gates files through an “Offsite Link” popup. So click above, then right-click the link + Save Link As. Make sure you get the .html file itself, and don’t end up with a snapshot of this blog post!)

 

Next, upload the file to your Design Studio. To be clear, you’re not creating an LP, you’re uploading the file as static HTML. This may not be something you’ve done before (you probably upload images, CSS, and PDFs) but Marketo actually supports any kind of file.

 

Screenshot after it’s been uploaded to Design Studio:

 

 

Then replace your embed code with this ever-so-slightly different version:

 

<script src="//pages.example.com/js/forms2/js/forms2.min.js"></script>
<form id="mktoForm_9999"></form>
<script>
MktoForms2.setOptions({
formXDPath : "/rs/123-ABC-456/images/marketo-xdframe-relative.html"
});
MktoForms2.loadForm("//pages.example.com", "123-ABC-456", 9999);
</script>

 

Where:

 

  • 123-ABC-456 represents your Munchkin ID
  • pages.example.com represents your Marketo LP domain
  • 9999 is o’course your form ID

 

A live demo (though all the code is above):

 

MktoForms2 :: XDFrame relative path for Tracking Protection

 

The why

Using your LP domain enables forms to show up. But there’s a special asset, only used upon submission, that will still be blocked by default. Naturally, this only reveals itself when you run end-to-end tests.

 

See, embedded forms use an IFRAME message relay (XDFrame) for cross-domain posts (there are other ways to do it, but they’re not as backward-compatible and the IFRAME method works fine + fast in all browsers, even back to IE8).

 

But the IFRAMEd document loads forms2.min.js from an absolute URL with your instance hostname, i.e. app-xxnn.marketo.com:

 

Oops! Tracking Protection ain’t gonna let that load, for the same reason it doesn’t like a Marketo domain in the main document. (You can’t avoid TP by using an IFRAME, that would be silly.) As you can see, the replacement XDFrame file uses a relative URL (/js/forms2/js/forms2.min.js), so it loads from your Marketo LP domain like the rest of the assets. Presto! No marketo.com for TP to get all paranoid about.

 



NOTES

forms2.min.js inside the IFRAME is only necessary because of its bundled  jQuery library, specifically the MktoForms2.$.ajax wrapper method. While not technically necessary, using jQuery keeps parity with the Forms 2.0 API.

***Posted on behalf of Kimberly Galitz, Marketing Automation and Attribution Specialist at Bandwidth.***

 

Getting Started with Bizible Reports 

When I first started using Bizible, the reports that I used most frequently were 'Bizible Persons with Bizible Touchpoints', 'Bizible Attribution Touchpoints with Opportunities', and 'Leads with Bizible Touchpoints'. The 'Bizible 101' reports were a great place to start. 

 

Pro Tip: I always advise people to focus on building out their top 3 basic reports. Having those basic reports ready to go is critical, it allows you to answer questions quickly to stakeholders. It is very common for people to come up to your desk and ask a very specific question such as “how’d this one campaign do?” It is extremely valuable to be able to quickly pull up those reports, instead of having to go back and rebuild them. 

 

Interpret the Data

When it comes to interpreting the data, take the question being asked and then use the data to answer the question. We use different data sets to answer different questions. We do not use different data sets to make us look the best, but to answer the question in the best way possible. For example, if you’re focused on what drives opportunity creation, we would use the W-Shaped model. If you’re looking at what drives closed/won deals or revenue, look at a Full Path or Custom Model. It is critical to know when to use different models and for what questions. 

 

When my team first started using Bizible, we first looked at all the opportunity reports. Initially, it was hard to interpret the data because it is difficult to analyze data in an attribution model if you have not done so before. 

 

Pro Tip:  If you are not familiar with looking at a weighted attribution model, look at the data that you are used to seeing next to the Bizible model you are using. 

 

For example, we always put the opportunity amount into a column, and then the W shape and full path model data next to it. This enabled us to see what the opportunity percentage looked like with our previous method and the Bizible method. Once you get used to viewing it the Bizible way, it all starts to make sense. 

 

What To Do Next

Use the data to optimize your marketing efforts and make informed decisions.  

 

Example 1: Using the data to optimize email strategy.

Certain channels are meant to be middle touch. If you are just measuring first touch or last touch, you are not going to see those middle touches receive credit. For us, email is one of those middle touch channels. Since the purpose of email is typically to nurture along the journey, not to create leads, it is very important to understand how it is performing further down the funnel. Before Bizible, we did not see how email was influencing revenue. Adding Bizible data into our mix allowed us to understand how certain email tracks were performing and their importance at certain points in the journey. 

 

Example 2: Using the data for events. 

Before implementing Bizible, we were making decisions for events based on how we felt about the event. For example, if reps didn’t think they had meaningful conversations at an event then we would not attend that event the following year. Once we started using Bizible to report on events, we started seeing that a lot of those events were actually very meaningful. Events have a very long tail. For example, there could be a touchpoint for a deal that would close 2 years later. 

It also helps us make additional strategic decisions for events. For example, if most of our touchpoints were from a meeting room instead of a badge scan, that helps inform us that maybe we don’t need a booth next year, just a meeting room. With Bizible data, we are able to make more informed decisions about events.

 

Scaling Your Attribution Initiatives

The number one piece of advice I can give is to start small. For example, I started by introducing Bizible reporting to the events team. I built reports for them and then set up a few meetings to talk to them about the data so they could get comfortable with it.  Now they are running with the Bizible reports on their own. They know how to interpret the data and speak to it, which is the key to being able to scale your attribution initiatives. Once you have that first team up and running with Bizible, you can move onto the next team. Giving everyone the power to run with the reporting and analysis themselves is super helpful. If the team adopts Bizible as a team instead of just one person running it, it will really help with your ability to scale your attribution initiatives.

The Launch Point portal has gone through a makeover recently! Apart from the new look, the following features were also rolled out:

      
  • Improved search navigation
  •   
  • Integration with G2 Crowd, a peer-to-peer review aggregation service
  •   
  • Categories, a new way to search the LaunchPoint partner applications, with a 2x2 grid to highlight popular applications
  •   
  • Stack Builder - an interactive tool to model and visualize MarTech stacks

 

The Stack Builder allows you to explore sample stacks curated by us, visualize your current MarTech stack or conceptualize a brand-new stack from scratch.

Here is a brief walk through the salient features of the Stack Builder. Please check it out and let us know what you think.

 

Using the Stack Builder

Launch the Stack Builder by visiting this page here. The page opens up with the Featured Apps engagement stack. This stack is a collection of featured applications from the LaunchPoint ecosystem.


The stack is partitioned into six buckets or phases – Plan, Engage, Measure, Content, Data, and Platform. A tile under each bucket represents an application from the LaunchPoint ecosystem. Mousing over each application tile brings up a small popover which shows the prominent highlights about the application. Clicking on the application opens up the application listing page, where further detailed information is available including a form to get in touch with the partner directly.


Plan, Engage, Measure, …:

The Stack Builder is partitioned in to 6 buckets: Plan, Engage, Measure, Content, Data & Platform. The Launch Point ecosystem uses categories as a way to group applications. The Stack Builder builds on top of that, by further grouping application categories into partitions. This helps to visualize the stack in the order of data/process flow during the various phases of marketing.

 

For example, the following application categories are grouped together under the “Plan” bucket: Budgeting & Finance, Conversion Optimization, Customer Intelligence & Data Science, Optimization & Testing. The application filter tool provides an easy one-click button to limit all the application categories and the applications that belong to those categories, which can be used to narrow down the choice of applications to consider for the stack.

To learn more about the Plan, Engage, Measure framework, check out this webinar.

 

Creating stacks with the Stack Builder requires an account on LaunchPoint. If you don’t have an account already, please create one by clicking on the Sign-Up button.

Login:

Once logged in to the LaunchPoint site, additional navigational items show up on the side bar.

My Stacks is where you will find all the stacks you created using the Stack Builder.

 

My Inquiries is a handy tool to keep track of messages sent to partners using the “Get Started” form available on each of the partner listing page.

 

Create a new stack from template:

The quickest way to create a new stack, is to use one of the pre-made templates as a starting point.

      
  • Select one of the existing Engagement Stacks or from one of your own from My Stacks and open it.
  •   
  • Click Save As

  •   
  • Fill out the details of the new stack (name and description)

    The new stack will now show up under “My Stacks”.

Edit Stack:

Once created, a stack can be edited to modify the applications in it. The edit mode uses the application filter as a quick way to search, select or remove applications from the stack.

The application filter has partition filter buttons on the right-hand side corner. Selecting one of the buckets, limits the listings in the filter as well as the buckets shown below.

 

This is very useful to focus on one partition at a time, to search and select applications. 

Click on the checkbox to add/remove an application to your stack. 

 

The application partition buckets are listed below the filter in order (Plan, Engage, Measure, Data, Content & Platform).

 

Unlike the view mode, in the edit mode the tiles are rendered as larger tiles, with details about the application in the tile. Mousing over the tile, brings up the popover with more details about the application (just like the view mode).

 

In addition, while browsing through the applications in the partition, it is easy to remove an application, by clicking on the cancel button on the popover.

 

With the improved search and grouped categories added in the latest Stack Builder update, companies will be able to build their marketing stack in a more efficient and organized manner. If you’re interested in checking out these new changes, you can visit the LaunchPoint Stack Builder here.

 

Have any questions or comments? Let us know your thoughts in the comment section below.

 

This article was written in collaboration with the Marketo Web Development team

In this edition of the How 2B Fearless series, we sat down with Emily Poulton, who is a Marketo Champion Alumni, London MUG Leader, and Fearless 50 2018 member. Emily shares what being a fearless marketer means for her and what it has meant for her career.

 

What does fearless marketing mean to you?

Fearless marketing means always doing what is right for the customer and for your team, however hard the battles may be. It is all about resilience and doing the right thing. When you know that a certain direction will not succeed in the long run due to an oversight in planning, catch it there and then find solutions I had a recent experience where a campaign was not planned for measuring success in Marketo. During the campaign building, I had to explain why this would not work to record campaign attribution. For me, it was tough to speak up at that point in time as everyone was excited to launch the campaign. It may seem hard to speak up in the moment, but in the long run it’s the right thing to do for the business and the customer.

 

Who is a fearless marketer you look up to and why?

Jamie Kirmess, Principal at LeadMD, is my fearless marketer. She was my first boss in the world of Marketo and her career has rocketed since we last worked together, so much so that I cannot keep up. She has so many ideas and will take the time and patience to explain the reasons behind a campaign or logic, from senior stakeholders to the people executing. She is smart and savvy and she doesn’t know this, but when I am stuck, I think, WWJD – what would Jamie do? Jamie was never afraid to push back on projects. She always explained her reasoning and offered solutions and alternatives to ensure all needs were met by having one campaign built smarter. This goes back a few years now since we worked together in 2014, but Jamie would always ask why I was building a campaign for someone, and if I couldn’t answer that, the project would not be done. As simple as that!

 

How did your career start out in marketing?

My first marketing job was actually during a placement year at University back in 2007, where I did a year-long internship producing marketing collateral and supporting events. I then had a series of generalist roles working for start-ups where I discovered my passion for automation and inbound marketing, I just didn’t know it at the time. I discovered the world of Marketo in 2014 and loved how it brought together creativity, logic and customer journeys. Marketo has opened many doors for me professionally, and it is one of the reasons I am in my Senior Marketing Operations role today. Marketo touches all parts of the business: sales, marketing, legal, operations, IT, technology and communications; It’s a great way to encourage cross-collaboration in the workplace, and can put you in front of key people within your organization as you start having those strategic conversations.

 

How did you get to the point you are at in your career today?

Back in 2018, I shared one of my biggest fearless moments on stage with the Marketing Nation. This was the moment when I walked into a senior meeting between my CMO, my CIO and Marketo’s CEO, CPO and EMEA VP because I wanted to meet them. That moment made me a Fearless 50 member and gave me the courage to keep striving for more. Since then, continuing my fearless journey, I took the leap of taking a career break to fulfill my personal ambitions: traveling Central and South America.

 

It was scary because I was leaving everything and everyone I knew behind (apart from the boyfriend as I dragged him with me) and I didn’t know if the employment market would change, or if I would find a great job on the other side. I planned the break 1 year in advance and it was very important to me to able to go and experience different cultures and explore the world. I was very honest about my intentions when I accepted the contract role at The Adecco Group, since integrity and trust are very important to me.

In the end, believing in my own abilities (not losing all my knowledge at the top of Machu Picchu) and being honest to employers about the break (I have a gap in my CV as I have just come back from a sabbatical) opened so many more doors than expected. At the time, it was scary, but luckily the world of Marketo and Operations has plenty of work opportunities across London.

 

Leaving full time employment to go explore the world could be seen as a dumb move, but in the long run, it was worth it, both personally and professionally because a great new challenging role found me on the other side.

 

What have you learned from other members of the Fearless 50?

The Fearless 50 members that I have met so far are all successful in their careers, humble and friendly. I learned from them that picking your battles is the key to being fearless. I find that focusing your efforts on the causes you believe in most at work means that you are able to achieve your goals, where you feel it matters most. Oh, and lots of passion.

 

What are three pieces of advice you would give to the next generation of fearless marketers?

1. Be honest and respectful of others around you.

It can be easy to want to hide the truth if it makes you look bad or go against others’ opinions. However, in my experience, admitting you don’t know or owning up to your errors makes you brave, which creates an environment of trust and respect around you.

 

For example, I found out that some of our records were being deleted in Marketo (oh no!) and in the end, it was because I set up a dodgy flow. I owned up to the marketing manager it was affecting and our CMO. Luckily, we ended up restoring the records, but it was worth explaining the reasons and the situation to everyone involved before they heard the news from someone else.

 

2. Trust yourself and explain why you believe a certain route is the right way to go.

When colleagues who shout the loudest are the ones being heard, taking a passive approach in meetings can seem like the easiest option. It can be difficult to be fearless and ensure your voice is heard, even when you truly believe that you have the solution, but people will appreciate you taking the initiative to explain your reasons – especially when you have data and examples. 

For example, I had a situation recently where I had two competitive and passionate colleagues who were trying to convince me that Marketo was broken, when I knew very well that it was the way they had chosen to setup our website reporting tool. It was very hard to go against what two people were saying but I had to be brave and explain the rationale, get some advice from other sources to prove my theory, and find the articles and data to back it up. In the end, my voice was heard and we’re now working on a collaborative solution.

 

3. Always be yourself.

Don’t go against who you are as a person and the values you believe in, it’s not sustainable long term. Your work will always be a reflection of you, so do the best you can, and if you think it will make a bigger impact, do it your way.


I always like to perform a task in my time and my way as I know that I will be able to explain it in future, especially when it comes to reporting and spreadsheets!


About Emily Poulton

 

 

LinkedIn: https://www.linkedin.com/in/emilypoulton/ 

Community Profile: Emily Poulton

In this edition of Marketo Master Class, we're partnering with Marketo Champion Ann Marie Gastineau to demystify best practices around scaling a nurture in Marketo. In this article we'll take a look at the time and place to implement a nurture, best practices around applying a tokenized strategy to nurtures, and more. If you have additional insight for running a best-in-class nurture program, let us know in the comments!

 

1. Why nurture? (How do you determine if a nurture is the right strategy for your business?)

 

Nurture is the right strategy for any lead who isn’t ready to buy from you immediately – which will be most everyone. Certainly, there’s bound to be a few sales-ready leads who fill out your Contact Us (or Get a Quote, or Free Trial, or whatever) form the first time they visit your site, but they’re rare. More likely, your target audience has no idea who you are (depending on how strong your brand is), or what you have to offer. They may not even realize they have a need.

 

 

66% to 90% of a Buyer’s Journey today is self-directed (Forrester) – which means your prospective buyers are out there right now roaming around the internet trying to decide what to buy and who to buy it from.

 

 

The goal of lead generation campaigns is to get as many people in your target audience into your database as cheaply as possible. This means offering something valuable for very little (an email address). Conversely, the goal of lead nurture is to convert them into sales-ready leads.

 

            2. What’s the most important aspect of a successful nurture? 

 

The key to nurture is to present the right type of content at the right time. Having campaigns in place that address each stage of your buyers’ journey is crucial. Then, use demographic and behavioral data to move leads or customers between campaigns at the right time.  

 

 

The easiest way to visualize your campaigns during planning is in a linear email flow, where leads receive each email at a set cadence in a set order. But a good nurture strategy isn’t just limited to email. Once you have a nurture campaign built, you can easily promote that content in additional channels, driving traffic into the nurture flow.  You could boost engagement experience in a mid or bottom-of-funnel campaign by remarketing to your audience in SEM (search engine marketing).

 

 

3. How would you execute a simple drip?

The simplest form of nurture is one email touch leading to the next in a series. Some may be gated (behind a form) and some ungated. Stringing together a series of email touches in a linear layout is a drip campaign, one after the next with no change in cadence. This is where most “nurturing” starts.

 

 

Drip campaigns are a great way to begin building your nurture. No matter how complex the structure eventually becomes, the first few pieces were probably built in a linear progression. And frankly, sometimes you just need to get stuff in market! A drip is a place to start.

 

 

 

 

 

 

4. What are the essential building blocks of a nurture?

 

 

Content Sets: Many marketers seem to like 3-touch nurture programs (a series of 3 emails) - I’m not really sure why. I suppose it could be aligning to the 3 stages of the funnel (TOFU, MOFU, BOFU), but you cannot possibly address the buyer’s journey in 3 touches. That said, you can think of these small series as a “set” (though it doesn’t have to be 3, it could just as easily be 4, 5, or 6 depending on you resources), a starting point. Build in chunks like this with each piece of content flowing into another like a conversation.

 

 

  

 

 

Persistent CTA: Now let’s make the flow more interactive. We already know buyers want to navigate their own journey. If you give them the opportunity, they will continue clicking and consuming. An important step to capturing that interest  is to introduce a “persistent” call to action – a hander-raiser CTA somewhere that’s always available. This way, buyers don’t have to wait for you to “lead” them to the bottom of the funnel, they can self-select their way there.

 

 

Follow-on Content: Next, build in routes to more content using follow-on content. This is the reason for building in “chunks.” If you build 4 touches (see: Content Set) at once, the assets in the first touch can include thumbnails with links to the next 3. I like to include these on the thank you pages and thank you emails rather than before the form – in this way, your gated page can remain still be streamlined and uncluttered with extra content.

 

 

Connected Content: Each piece of content that buyers engage with should lead to more content. If nurture is a game of chutes and ladders – consider building in as many chutes as possible.

 

 

 

 

 

5. What is layering?  

 

 

Once you have a few nurture tracks in place of decent length (depending on your buyer’s journey and time-to-buy, begin routing between them and creating more intricate flows. For example, let’s say you have a top-of-funnel nurture campaign in place that uses the follow-on content approach described above. Mid-way through your campaign, begin placing follow-on content from your mid-funnel campaigns on your thank you pages and emails. Set up trigger campaigns that move leads from one engagement program to another based on consumption.

 

 

 

 

 

 

 

 

 

 

Set up scoring campaigns that watch for buying signals on your site and with your content. If a lead interacts exclusively with content from one solution – route them to a bottom-of-funnel campaign focused on that.

 

 

 

 

 

 

6. Are you leveraging tokens in your nurture? If so, how do you connect your token strategy with your nurture strategy?

 

 

Building this many campaigns, each with multiple touches, and each of those having 2+ assets (emails and landing pages) a piece, is a seriously heavy lift. Using tokens makes building more manageable as well as consistent across multiple users.

 

 

A few tokens that I like to use when mass producing nurture touches are:

 

      
  • Persistent CTA copy and URL – this is the hand-raiser call to action in the footer of emails and landing pages (get a demo, free trial, contact, etc.); this one lives at the Engagement Program level to carry through each nested touch program
  •   
  • Banner images – a gated touch will have 2+ emails and landing pages each, a token saves you from adding it in 4 places, or worse, missing one
  •   
  • Primary CTA copy and URL – this is the button copy and link for whatever piece of content you’re highlighting in the touch
  •   
  • Follow On Content images, descriptions and URLs – tokenizing these components streamlines the follow-on content set up process

 

 

 

 

 

 

7. What different kinds of nurture do you use?

 

 

General Nurture: This is the place to put everyone you don’t know what to do with. This nurture would contain top-of-funnel content that’s highly engaging. There could be a great length of time where the right people just aren’t ready to buy, so this is an opportunity to keep them engaged until they are – all while establishing your brand as a trusted source in your space.

 

 

Persona Nurture: Once you’ve established who someone is, you may move them to a campaign focused on their pain points. This still isn’t the right place to sell – but you can start honing your message.

 

 

Bottom-of-Funnel Nurture: This nurture may be product-, service-, or solution-focused. This is where you finally get to talk about yourself. You’ve had lots of time to lay the groundwork – proving your authority, laying out resolutions to their pain points at a high level – now you can spell out just how your solution is the best choice.

 

 

Recycle Campaigns: Direct leads that have been rejected by sales here, it may be worth having one for each reason they may be rejected, aligning to BANT (budget/authority/need/timing) or closed lost for any number of reasons – competitor-focused campaigns fall under this category.

 

 

Onboarding Campaigns: Campaigns for new customers – training, adoption, etc.

 

 

Cross-Sell/Up-sell: Campaigns for existing customers, especially if there’s particular value in having a combination of multiple offerings. These can be created by adjusting the messaging in your bottom-of-funnel campaigns.

 

 

8. When do you use one nurture with multiple streams vs multiple nurture programs that function as a singular marketing strategy?

 

Typically, one Engagement Program with multiple streams makes the most sense if you’re marketing to a single defined audience that’s moving through stages. A general nurture top-of-funnel campaign, for example, might have content stages that you want leads to progress through. You’d build multiple streams and create transition rules that move them from one to the next as they engage.

 

When you learn something new about a lead – their persona, or their product of interest – it’s time to route them to a new nurture track that caters to the segment they’ve just qualified for.

 

 

 

 

 

9. Results: Integrated Nurturing ecosystem

 

 

Pulling all of these components and tactics together results in an integrated nurture ecosystem. A place where your prospects can move through your content at their own pace - as quickly, or slowly, as they like - like chutes and ladders. Where triggered routing smart campaigns move them between nurture tracks to address their needs and pain points.

 

Keys to success – integrated nurture ecosystem:

 

1.     Build in “chunks” rather than all at once

 

 

2.     Create routes to continued consumption with follow-on content

 

 

3.     Use triggered campaigns to route leads between engagement programs. Trigger on:

 

 

a.     Content engagement

 

 

b.    Persona and interest scoring

 

 

4.     Include a persistent CTA to harvest sales-ready leads faster

 

 

 

 

Filter Blog

By date: By tag: