Summit Lab: Server-Side Digital Marketing

19 May 2019 » Server Side

Last Thursday (16/05/2019) I delivered my very first lab at an Adobe Summit. I would like to thank all of you who attended. It went really well and many participants managed to do the full exercise. I have received many requests to publish the content or explain more. There is so much to explain, that I will write multiple posts in the coming weeks, to cover all aspects. Use the comments if you need more clarifications.

For those of you who could not attend the Adobe EMEA Summit, the lab was about “Server-Side Digital Marketing”. Check my post about the PHP PoC to understand the details.

Pros & cons

In my first post about server-side digital marketing, I gave a detailed explanation of some advantages and disadvantages of these techniques. In the lab, I summarised them (and added a few more) as in the following table.

Advantages Disadvantages

Faster websites

  • Less HTTP requests from the browser​
  • Less code to download​
  • Less code to execute in the browser​
  • Very high bandwidth in data centres
  • No flicker​

Data quality​

  • More control over the execution environment​​
  • Less likelihood of data​ errors

Easier SPA development​

  • No need for direct call rules​​
  • All request to the server can be made to track something​

Headless implementations​

  • Voice assistant skills​​
  • IoT devices​​
  • Chatbots​

Less flexibility​

  • No such concept as a “tag manager”​
  • More dependence on IT​

Increased complexity​

  • No GUI for optimisation or personalisation​
  • Complex debugging​

Increased time to market​

  • Changes may requires a code release​

No standard libraries available​

DMP functionality very limited

Sample website

I also created a PoC to show how to implement it. You can find it in this Gitlab link: It is important to mention that it will not work if you just clone/fork it. You need to create a configuration file named ADBServerConfig.json and place in the same directory as index.php and the other *.php files.

    "version": "2019-01-13T17:42:00Z",
    "marketingCloud" : {
        "org": <YOUR ORG ID>,
        "ssl": false
    "target": {
        "clientCode": <YOUR ADOBE TARGET CLIENT ID>,
        "timeout": 5
    "analytics": {
        "rsids": <RSID>,
        "server": <ANALYTICS SERVER>,
        "charset": "UTF-8",
        "privacyDefault": "optedin"

I have not tried setting ssl to true, but it should work. Also, remember to enclose in double quotes all strings in this JSON file. Let me know if you see any issues with the website and I will try to fix them. Remember that this is just a PoC and no guarantees are made.

Note. You must keep the copyright notice at the bottom of the web pages. All credits for the HTML code go to

Adobe tools

This is a summary of the Adobe tools I explained in the lab:

  • ECID. I already wrote about it in a previous post and the PHP library also has it. The most important conclusion is that, in web, you should never generate the ECID server-side. The reason is that AAM becomes almost useless. Instead, as I showed in the lab and in the code, you should use a hybrid implementation. The most immediate consequence is that Target and Analytics have to be run client-side on the first page of the first visit. I will write a future post to explain this hybrid solution in detail. Obviously, if you are implementing for a headless device, your only option is ECID server-side.
  • Target. In the index.php file you can see how I implemented a hybrid implementation, using regional mboxes and at.js. The basics of the server-side part are already documented in my server-side Target post, but I did not explain the hybrid solution nor A4T. This will be explained in a later post.
  • Analytics. All *.php files of the sample website contain a hybrid Analytics implementation at the bottom. I already wrote about server-side Analytics, where you can find more details. I am not sure I will write about it in the future, as it is fairly straight forward. Maybe I will enhance the PHP library to also generate the JavaScript. Other ideas are welcome.

I explicitly excluded Audience Manager, as it adds additional complexity in hybrid implementations and the lab was only 45 minutes long. In fact, I still need to figure out how to create this particular implementation, keeping all its features intact. This will also merit its own post in the coming weeks.

Note. By “hybrid implementation” I mean an implementation of Adobe tools where part is client-side and part is server-side.

Single Page Applications

When I started working in the web industry, SPAs were mostly unheard of. Nowadays, if your website is not an SPA, it is “antique”. I still need to learn how they work internally (I understand the concept).

Why am I mentioning them? As I explained in the lab, SPAs may not need hybrid implementations of Target and Analytics. They may be able to operate 100% server-side. I hope to have time to learn SPAs and write about them in another post.


Let me know if I have missed something from the lab in this summary!