[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"cms-page:\u002Fblog\u002Fwordpress-amazon-cloudfront":3},{"date":4,"date_gmt":4,"content":5,"sticky":7,"format":8,"categories":9,"collections":11,"coauthors":12,"class_list":14,"acf":23,"head_links":385,"breadcrumbs":386,"reading_minutes":198,"category":394,"head":396},"2018-01-08T16:08:18",{"rendered":6},"\n\u003Cp>This post was first written in 2018, and whilst at the time of updating, Jan 2020, this is not wrong, there are a number of other methods of speeding up your WordPress website.\u003C\u002Fp>\n\n\n\n\u003Cp class=\"has-background\" style=\"background-color:#23b09b;color: white;font-family: 'Red Hat Display'; id=\" updated-post\"=\"\">\u003Cstrong>We now recommend \u003Cstrong>Kinsta web hosting\u003C\u002Fstrong> for standard WordPress multi page applications as their bespoke caching layers are just as great as those seen in this tutorial, and also strongly advocate performant JavaScript Single Page Applications (SPAs) if you or your developers have the skillset\u003C\u002Fstrong>\u003C\u002Fp>\n\n\n\n\u003Cp>Use Amazon as a full page cache solution and enjoy the benefits of high availability and global coverage &#8211; all whilst reducing your site’s perceived response time to a fraction of what it was &#8211; with this guide.\u003C\u002Fp>\n\n\n\n\u003Cp>I’m sure I’m not alone when I go to spin up a new server and err on the side of caution when picking the instance size in Amazon’s dashboard. “Small” might be too small for even a modest B2B lead generation site like ours.\u003C\u002Fp>\n\n\n\n\u003Cp>Our traffic is growing monthly, and we periodically run aggressive paid campaigns around asset downloads &#8211; so we need to be somewhere fit for the future that can handle traffic spikes and an increasingly global audience.\u003C\u002Fp>\n\n\n\n\u003Cp>The aim of this exercise is to achieve a page load time under 1 second, which, as \u003Ca rel=\"noreferrer noopener\" href=\"https:\u002F\u002Fdevelopers.google.com\u002Fspeed\u002Fdocs\u002Finsights\u002Fmobile\">Google Developers put here\u003C\u002Fa>, is a reasonable requirement for mobile users to see only the above the fold content. On desktops, we’d expect faster load times so we expect to load the entire page in this time. We also want to achieve this result, within some margin, globally.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"amazon-web-services\">Amazon Web Services\u003C\u002Fh2>\n\n\n\n\u003Cp>There are plenty of services out there which can accomplish similar results to those shown here, but our preference is the Amazon Web Services platform as we’re familiar with it. In essence, the steps we need to accomplish are (don’t jump ahead &#8211; there’s some required setup below):\u003C\u002Fp>\n\n\n\n\u003Col class=\"wp-block-list\">\u003Cli style=\"font-weight: 400;\">Environment configuration\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Configuring your current setup\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Setting up Cloudfront\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Local testing\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Going ‘live’ with your Cloudfront distribution\u003C\u002Fli>\u003C\u002Fol>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"1-environment-configuration\">1. Environment configuration\u003C\u002Fh2>\n\n\n\n\u003Cp>Before we begin, be aware that many WordPress Cloudfront blogs are simply talking about using Cloudfront as an asset-only origin-pull CDN (content delivery network) mirror rather than a full page cache. Under an asset CDN model, your web server is still handling all HTTP requests to deliver pages. Conversely, with a full page CDN setup, all of your non-transactional HTTP requests will simply be served a static\u002Fsnapshot HTML version of your web page in a split second. The request doesn’t touch your server until customers start engaging with shopping carts or filling forms (or you drop them a cookie &#8211; more on this later).\u003C\u002Fp>\n\n\n\n\u003Cp>You don’t need to be using Amazon Web Services to host your website for this to work. But in the aim of keeping everything together, it’s worth pointing out you can host your website on Amazon’s EC2 servers (behind a load balancer if you wish) and you can also manage your DNS through Amazon’s Route 53 DNS service, too.\u003C\u002Fp>\n\n\n\n\u003Cp>You will likely want an SSL certificate on your origin server, but you can also manage your public facing SSL Certificate via AWS’ Certificate Manager, which provides a good level of security and trust for your customers. We have chosen Let’s Encrypt for our origin server’s TLS supplier, but during the setup of this process, Let’s Encrypt won’t work as you need a public domain, so we used a premium SSL we had that was about to expire to bridge the gap for us. Alternatively, you could launch insecurely on HTTP and then go through the upgrade process retrospectively (origin first, then Cloudfront as discussed below &#8212; you can then change the behaviour of the Cloudfront distribution to upgrade HTTP to HTTPS traffic for you).\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"2-configuring-your-current-setup\">2. Configuring your current setup\u003C\u002Fh2>\n\n\n\n\u003Cp>It’s a lot easier to make these changes on a duplicate server, rather than your live one, for obvious reasons &#8211; but I’ll leave the exact process for you to decide. Bear in mind some of the steps below will temporarily impact public site delivery.\u003C\u002Fp>\n\n\n\n\u003Cp>You will need to ensure your origin server can be served at different URLs. We chose a subdomain to ensure DNS management was easier. Let’s say we also ensure our website is addressable and accessible at example.impression.co.uk, which you can easily achieve by adding an additional Alias entry into your vhosts file and then restarting the process. For NGiNX, this would look something like;\u003C\u002Fp>\n\n\n\n\u003Cp>\u003Ccode>server {\u003Cbr>\nlisten 80;\u003Cbr>\nserver_name impression.co.uk www.impressiondigital.com example.impression.co.uk;\u003Cbr>\n...\u003Cbr>\n}\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Cp>Once this configuration has been changed, then you are ready to set up your TLS\u002FSSL certificate and Cloudfront distribution.\u003C\u002Fp>\n\n\n\n\u003Cp>In AWS, select Certificate Manager and follow the intuitive steps. Remember this is for your main public www. domain. You’ll need to verify your ownership via a standard administrator verification email, but the process of creating a certificate is relatively painless. (I believe you can also import your own certificates if you need to, but we haven’t completed this ourselves just yet so cannot recommend this approach.)\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Famazon-certificate-manager-success.jpg\" alt=\"\" class=\"wp-image-9096\" width=\"543\" height=\"406\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cp>Cloudfront does allow you to extend the “Cache-Control” header for minimizing your AWS bills, but there are a few various settings you will want to make on your server before getting started. These are typical optimisations which you should really consider rolling out regardless;\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\u003Cli style=\"font-weight: 400;\">Enable gzip compression\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Remove query string from static resources\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Extend browser cache lifetime\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">Compress and concatenate CSS and JavaScript files\u003C\u002Fli>\u003C\u002Ful>\n\n\n\n\u003Cp>I’ve covered all of these briefly below for an NGiNX setup. Apache alternatives are available, though, and actually Google’s Pagespeed module for both Apache and NGiNX is very good at adding much of this for you.\u003C\u002Fp>\n\n\n\n\u003Cp>Also, many WordPress plugins achieve the same, but we prefer less WordPress plugin code bloat where possible.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"enable-gzip-compression\">Enable gzip compression\u003C\u002Fh3>\n\n\n\n\u003Cp>By default, gzip compression is likely already enabled, but it’s always good to check. Smaller files mean less bandwidth transfer to your website visitors, but with a service feeding this for you, it will also translate to a small cost saving, too.\u003C\u002Fp>\n\n\n\n\u003Cp>Check your nginx.conf file, located here: \u002Fetc\u002Fnginx\u002Fnginx.conf\u003C\u002Fp>\n\n\n\n\u003Cp>The most important lines below are gzip on and gzip_types;\u003C\u002Fp>\n\n\n\n\u003Cp>\u003Ccode>gzip on;\u003Cbr>\ngzip_disable \"msie6\";\u003Cbr>\ngzip_vary on;\u003Cbr>\ngzip_proxied any;\u003Cbr>\ngzip_comp_level 6;\u003Cbr>\ngzip_buffers 16 8k;\u003Cbr>\ngzip_http_version 1.1;\u003Cbr>\ngzip_types text\u002Fplain text\u002Fcss application\u002Fjson application\u002Fx-javascript text\u002Fxml application\u002Fxml application\u002Fxml+rss text\u002Fjavascript;\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Cp>If you needed to edit this file, ensure that it’s saved and you test and restart the NGiNX process.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"remove-query-string-from-static-resources\">Remove query string from static resources\u003C\u002Fh3>\n\n\n\n\u003Cp>Some services will not cache files which are referenced with query strings in their URLs. This is because feasibly the query string is making the file response in some way dynamic, or it is referencing a particular file version. There are a couple of simple WordPress functions.php drop-ins which can achieve this quickly for you &#8212; as with all WordPress code editing, please ensure this is a good fit for your needs on a local or staging environment first;\u003C\u002Fp>\n\n\n\n\u003Cp>\u003Ccode>function impression_remove_asset_version( $url ){\u003Cbr>\n$parts = explode( '?', $url );\u003Cbr>\nreturn $parts[0];\u003Cbr>\n}\u003Cbr>\nadd_filter( 'script_loader_src', 'impression_remove_asset_version', 15, 1 );\u003Cbr>\nadd_filter( 'style_loader_src', 'impression_remove_asset_version', 15, 1 );\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"extend-browser-cache-lifetime\">Extend browser cache lifetime\u003C\u002Fh3>\n\n\n\n\u003Cp>This is important as browsers, without knowing how long you expect a resource to be up-to-date for, will request it on every page load. Images and other media very rarely change once they’re uploaded, so include a snippet like this in your sites-available configuration and your users’ browsers will stop repeat queries to your files &#8212; and this will save you on your Cloudfront bills, too.\u003C\u002Fp>\n\n\n\n\u003Cp>\u003Ccode>location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {\u003Cbr>\nexpires 1y;\u003Cbr>\n}\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"compress-and-concatenate-css-and-javascript-files\">Compress and concatenate CSS and JavaScript files\u003C\u002Fh3>\n\n\n\n\u003Cp>With WP Bedrock, we use Laravel Mix in our build process to ensure we get fresh file names on each code compilation. This is a cache-busting way to publish new site content, but it may not be available to all depending on your build process. What we would suggest is in some way ensuring your CSS and Javascript file names are versioned so that you can take advantage of this caching behaviour, too.\u003C\u002Fp>\n\n\n\n\u003Cp>In addition, like many good build processes now, you should attempt to concatenate all similar file types, and also to compress them into smaller files. This will save initial bandwidth and also on request volume. We use Webpack at Impression, but Gulp, Grunt, Codekit, etc, are all good alternatives and they will achieve similar results.\u003C\u002Fp>\n\n\n\n\u003Cp>Once you’re all set up, you should see the following in your dashboard:\u003C\u002Fp>\n\n\n\n\u003Cp>Finally, before we set up the Cloudfront distribution, the other required step, should you wish to keep server-style logs, is to set up an empty S3 bucket. This is where the logs will be stored, as seen in the next image. The format is a little different to Apache\u002FNGiNX server logs but it’s a good idea to get these stored ready for when they’re needed. If they are, then you’re likely going to want to download and concatenate them via a command line\u002Fterminal window as each compressed log file is tiny.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcloudfront-s3-logs.jpg\" alt=\"\" class=\"wp-image-9103\" width=\"588\" height=\"245\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"3-setting-up-cloudfront\">3. Setting up Cloudfront\u003C\u002Fh2>\n\n\n\n\u003Cp>To set up Cloudfront, head to your Amazon Cloudfront dashboard, click “Create Distribution” and then select “Get Started” under the Web heading.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcloudfront-create-distribution.jpg\" alt=\"\" class=\"wp-image-9099\" width=\"630\" height=\"100\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cp>Enter your newly publicly accessible origin domain name, and either set or accept the default ID. I also like to set the Origin Protocol Policy to “match viewer” and then handle HTTP -&gt; HTTPS upgrades at both the server and Cloudfront levels.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Faws-new-cf-origin.jpg\" alt=\"\" class=\"wp-image-9097\" width=\"576\" height=\"340\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"origin-headers\">Origin headers\u003C\u002Fh3>\n\n\n\n\u003Cp>Next up, if you want to be extra secure, you can set headers here which are automatically appended to requests when they are sent to the origin. If you wanted to password protect your origin via htpasswd or similar, this is where you’d insert the username and password into the Authorization header in order to allow requests through freely.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter\">\u003Cimg decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Forigin-custom-headers.jpg\" alt=\"\" class=\"wp-image-9110\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"default-caching-behaviours\">Default caching behaviours\u003C\u002Fh3>\n\n\n\n\u003Cp>Depending on your current (or planned) HTTPS policies, you may want to allow either both HTTP and HTTPS, or just upgrade all requests to HTTPS at the Cloudfront level. Typically we choose the upgrade option here. This is the default cache behaviours and you can override these with specific settings for specific URL path patterns when we come to add additional custom behaviours.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fdeafult-cache-behaviours-https.jpg\" alt=\"\" class=\"wp-image-9106\" width=\"593\" height=\"222\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"whitelist-headers\">Whitelist headers\u003C\u002Fh3>\n\n\n\n\u003Cp>Within this same section, you can further specify your default header behaviour. We need to forward requests on to the origin server with the original hostname appended, for WordPress to handle the requests properly. To do this, select “Whitelist” for the value of “Cache Based on Selected Request Headers” and then select “Host” from the list as per this screenshot.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcloudfront-whitelist-headers.jpg\" alt=\"\" class=\"wp-image-9104\" width=\"639\" height=\"211\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"whitelist-cookies\">Whitelist cookies\u003C\u002Fh3>\n\n\n\n\u003Cp>WordPress relies on a number of cookies to function, which are listed below. Under “Forward Cookies” select “Whitelist” and paste in the below. PHPSESSID is required to persist server sessions, and the other are for WordPress admin\u002Flogged in sessions to maintain an authorised state.\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\u003Cli>\u003Ccode>PHPSESSID\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>wordpress_logged_in_*\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>wordpress_test_cookie\u003C\u002Fcode>\u003C\u002Fli>\u003Cli>\u003Ccode>wp-settings-*\u003C\u002Fcode>\u003C\u002Fli>\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"global-distribution\">Global distribution?\u003C\u002Fh3>\n\n\n\n\u003Cp>Regarding price classes, you’ll have the option here to choose just how global your content needs to be. The options are clear from the image below &#8212; if you currently receive or aspire to receive global traffic then there’s only a small set up in cost to select “All Edge Locations” here.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcloudfront-edge-locations.jpg\" alt=\"\" class=\"wp-image-9100\" width=\"645\" height=\"194\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"tls-ssl-certificates\">TLS \u002F SSL Certificates\u003C\u002Fh3>\n\n\n\n\u003Cp>Under the SSL section, select this SSL\u002FTLS certificate which you generated earlier. If your certificate isn’t visible, then use the reload button or check that the certificate has validated your ownership and generated successfully.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter\">\u003Cimg decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcloudfront-run-custom-ssl-certificate.jpg\" alt=\"\" class=\"wp-image-9102\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"access-logging\">Access logging\u003C\u002Fh3>\n\n\n\n\u003Cp>Logging is also configured on this setup screen. Just Enable it from the checkbox and select the S3 bucket name which you set up earlier. Set a prefix if you intend to share this bucket with other sites or use it for other purposes, too.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcloudfront-logging.jpg\" alt=\"\" class=\"wp-image-9101\" width=\"686\" height=\"170\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"4-additional-custom-behaviours\">4. Additional custom behaviours\u003C\u002Fh2>\n\n\n\n\u003Cp>In addition to the defaults set above, there are some additional cache Behaviours required for WordPress to function properly. All custom cache Behaviours are URL pattern based &#8211; so easily account for URLs like wp-admin, .jpg, and specific page URLs. Switch to the Behaviours tab and click Create Behaviour to get started.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcustom-behaviours.jpg\" alt=\"\" class=\"wp-image-9117\" width=\"614\" height=\"169\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cp>The purpose of some of these additional rules is to allow HTTP requests to punch straight through the Cloudfront cache without serving the incorrect, cached content whilst doing so. The other rules are designed to force long lifetimes on asset files, for example JavaScript, CSS and media.\u003C\u002Fp>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"disable-caching\">Disable caching\u003C\u002Fh3>\n\n\n\n\u003Cp>Create a new Behaviour and copy across the settings from my image below. I chose here to redirect all HTTP traffic to HTTPS as that’s what our setup at Impression is capable of. I input the pattern which is discussed below, and most importantly for invalidating this pattern’s caching is the setting for the option “Cache Based on Selected Request Headers” which is set to All.\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fcustom-behaviour-setting.jpg\" alt=\"\" class=\"wp-image-9105\" width=\"477\" height=\"724\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cp>To complete the setup, ensure all WordPress related routes also allow for POSTing data in&nbsp;and click save. Next up, complete the same for each of the below if appropriate for your setup.\u003C\u002Fp>\n\n\n\n\u003Cul class=\"wp-block-list\">\u003Cli style=\"font-weight: 400;\">wp* (this covers all WordPress admin and JSON routes. It also covers framework routes and WordPress subfolder installs caused by frameworks, for example \u003Ca rel=\"noreferrer noopener\" href=\"https:\u002F\u002Froots.io\u002Fbedrock\u002F\">Bedrock\u003C\u002Fa>.)\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">.well-known (this is a required route for Let’s Encrypt postbacks)\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">xmlrpc.php (As far as I’m aware, you can treat this as optional, however deliberately missing out this WordPress file will remove many remote publishing capabilities of WordPress)\u003C\u002Fli>\u003Cli style=\"font-weight: 400;\">purge* (we also use PHP-FPM caching on our servers as a backup, and because it integrates with our continuous deployment setup, so we allow for POSTing and GETing the \u002Fpurge URLs too. You may not need this one.)\u003C\u002Fli>\u003C\u002Ful>\n\n\n\n\u003Ch3 class=\"wp-block-heading\" id=\"extending-cache-lifetime\">Extending cache lifetime\u003C\u002Fh3>\n\n\n\n\u003Cp>Opposed to the steps above, where we want to disable caching, for asset files and even the HTML pages, we want to extend both their Cloudfront and browser cache lifetime to much larger values.\u003C\u002Fp>\n\n\n\n\u003Cp>Images, versioned code files (CSS, JavaScript) and other media, in theory, will not be changed &#8211; ever. So these files may persist in the cache.\u003C\u002Fp>\n\n\n\n\u003Cp>To configure these settings for such files, proceed as above, but leave request types to only GET, HEAD. Under “Object Caching” select “Customise”, and then change the maximum and default TTL values to a very large number &#8212; something like 31536000 (1 year).\u003C\u002Fp>\n\n\n\n\u003Cp>Also, set “Compress objects automatically” to “Yes” so that files with the “Accept-Encoding: gzip” header are compressed by Cloudfront.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"5-local-testing\">5. Local testing\u003C\u002Fh2>\n\n\n\n\u003Cp>If you have completed your setup and have added your custom Behaviours, then you’re ready to confirm your setup is working well. Whilst you could go straight ahead and hope, testing is in fact very simple to do via your hosts file. The reason being is that the origin server will already be visible to the Cloudfront distribution, therefore no further Cloudfront changes are required in order to verify success.\u003C\u002Fp>\n\n\n\n\u003Cp>To get started, use Terminal (or a Windows equivalent) to get a valid IP address for your Cloudfront distribution. These can change over time, but in my experience don’t do so very frequently &#8211; but either way do not rely on them &#8211; always CNAME in a live environment.\u003C\u002Fp>\n\n\n\n\u003Cp>\u003Ccode>$ dig +short d286mopxzp4hip.cloudfront.net\u003Cbr>\n54.230.9.186\u003Cbr>\n54.230.9.26\u003Cbr>\n...\u003Cbr>\n54.230.9.210\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Cp>Once you have a valid IP, just add this to your local hosts file as per any other DNS live test and then, from a cookieless browser (or curl via Terminal) request a page you’d like to test. It’s likely on the first request you won’t see a Cloudfront Hit header (as the file isn’t yet in the cache) but on the second you should see the file being requested from the Cloudfront cache.\u003C\u002Fp>\n\n\n\n\u003Cp>The headers you’re specifically looking for are shown below;\u003C\u002Fp>\n\n\n\n\u003Cp>\u003Ccode>via: 1.1 d887f5d446ae9c64e0365e1b394dac21.cloudfront.net (CloudFront)\u003Cbr>\nx-amz-cf-id: aIldEmX8N6PwXX9LfOiK3TUSAj1oCrOo_C9HiN-ZoV0zxgDF4SNCHw==\u003Cbr>\nx-cache: Hit from cloudfront\u003C\u002Fcode>\u003C\u002Fp>\n\n\n\n\u003Cp>Also, given your custom Behaviour settings, it’s also worth trying to log in to WordPress and to check that Cloudfront isn’t caching this. Also test your contact forms, any shopping baskets and similarly dynamic functionality elements. Our rules above \u003Ci>should\u003C\u002Fi>&nbsp;account for most situations but without looking at your specific situations we can’t guarantee that.\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"6-going-live-with-your-cloudfront-distribution\">6. Going ‘live’ with your Cloudfront distribution\u003C\u002Fh2>\n\n\n\n\u003Cp>To go live, once tested, just change your public DNS settings on your name servers to point the www. subdomain to your Cloudfront distributions web address via CNAME. If you don’t currently have a non-www to www redirection in place, then just use a freely available one via a Google search so that your origin’s IP address\u002Fidentity is concealed.\u003C\u002Fp>\n\n\n\n\u003Cp>If you are using Let’s Encrypt, now is a good time to run the certbot renew command via your command line, in order to double-check for issues with the requests pointing to \u002F.well-known getting through ok.\u003C\u002Fp>\n\n\n\n\u003Cp>If during testing, or following a future deployment, you need to clear the Cloudfront cached version of an asset or page, then you can do this under the Cloudfront Invalidations tab. Try to match the file as precisely as possible as clearing global Cloudfront caches is technologically expensive &#8211; in terms of resource, but there’s also a small cost to you (if used excessively).\u003C\u002Fp>\n\n\n\n\u003Ch2 class=\"wp-block-heading\" id=\"full-page-wordpress-cloudfront-caching-results\">Full page WordPress Cloudfront caching results\u003C\u002Fh2>\n\n\n\n\u003Cp>Impression has been running on a very similar setup to this for a little while now and we’re very pleased with our results. We’ve managed to achieve almost consistent sub-1000ms response times via Pingdom tools in our local test location (Sweden), and when we test across the Atlantic in New York we get very comparable results too. Here are our results;\u003C\u002Fp>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fimpression-sweden.jpg\" alt=\"\" class=\"wp-image-9109\" width=\"489\" height=\"398\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cdiv class=\"wp-block-image\">\u003Cfigure class=\"aligncenter is-resized\">\u003Cimg loading=\"lazy\" decoding=\"async\" src=\"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F05\u002Fimpression-new-york.jpg\" alt=\"\" class=\"wp-image-9108\" width=\"491\" height=\"405\"\u002F>\u003C\u002Ffigure>\u003C\u002Fdiv>\n\n\n\n\u003Cp>If you have any feedback or suggestions, or comments of any kind, please leave them below. If you think we might be able to help you increase your website’s resilience and performance then please \u003Ca rel=\"noreferrer noopener\" href=\"\u002Fget-in-touch\u002F\">get in touch\u003C\u002Fa> with our team. If you successfully implement this through our instructions, please post a screenshot like ours below!\u003C\u002Fp>\n",false,"standard",[10],37,[],[13],108,[15,16,17,18,19,20,21,22],"post-3573","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web",{"page_content_modules":24,"hero":194},[25,154],{"acf_fc_layout":26,"reduced":27,"top_overlap":-1,"bottom_underlap":-1,"disable_observer":27,"title":28,"content":6,"authors":29},"blog_post_content",true,"Running WordPress entirely behind Amazon Cloudfront to achieve global sub-1000ms page load times",[30],{"id":31,"path":32,"display_name":33,"job_title":34,"description":35,"avatar_url":36,"acf":37},1,"\u002Fabout\u002Four-team\u002Faaron-dicks\u002F","Aaron Dicks","Chief Technology Officer","Chief Technology Officer of Impression. Previously a developer and SEO, I now oversee our technology- and data-driven services, as well as some of our innovation and software development. Technical problem solver.","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress&fit=crop&fm=jpg&h=150&q=80&w=150&bg=CFE6F9",{"job_title":34,"full_bio":38,"specialist_service_links":39,"photo":98},"\u003Cp>Chief Technology Officer. Co-founded Impression in 2012.\u003C\u002Fp>\n\u003Cp>I’m a self-taught web developer who stumbled into digital marketing through a part time job at University. I went on to work with a number of digital agencies when I was in an in-house marketing manager role which led me to identify an opportunity to start Impression to offer a better service and product.\u003C\u002Fp>\n\u003Cp>Having been here from day one, I’ve held many roles at Impression, but have since settled back into a technology role. I lead our technology and data service design and delivery and also look after some of our internal media software development.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Something that I’m proud of:\u003C\u002Fstrong>\u003Cbr \u002F>\nBuilding a business that can have so many positive impacts across our team, clients and &#8211; in time &#8211; a more positive impact on the community and environment.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Outside of work:\u003C\u002Fstrong>\u003Cbr \u002F>\nYou’ll find me walking my Giant Schnoodle, Otto.\u003C\u002Fp>\n",[40,57,69,79,89],{"page":41,"link_text":45},{"ID":13,"post_author":42,"post_date":43,"post_date_gmt":43,"post_content":44,"post_title":45,"post_excerpt":44,"post_status":46,"comment_status":47,"ping_status":47,"post_password":44,"post_name":48,"to_ping":44,"pinged":44,"post_modified":49,"post_modified_gmt":49,"post_content_filtered":44,"post_parent":50,"guid":51,"menu_order":52,"post_type":53,"post_mime_type":44,"comment_count":54,"filter":55,"url_path":56},"98","2020-12-16 14:36:55","","Digital Marketing Strategy","publish","closed","strategy","2025-10-29 17:34:16",33,"\u002F?page_id=108",0,"page","0","raw","\u002Fdigital-marketing\u002Fstrategy\u002F",{"page":58,"link_text":68},{"ID":59,"post_author":60,"post_date":61,"post_date_gmt":61,"post_content":44,"post_title":62,"post_excerpt":44,"post_status":46,"comment_status":47,"ping_status":47,"post_password":44,"post_name":63,"to_ping":44,"pinged":44,"post_modified":64,"post_modified_gmt":64,"post_content_filtered":44,"post_parent":65,"guid":66,"menu_order":52,"post_type":53,"post_mime_type":44,"comment_count":54,"filter":55,"url_path":67},24830,"1","2023-09-09 12:14:08","Media Measurement","measurement","2026-09-25 10:45:33",17552,"\u002F?page_id=24830","\u002Fmedia-solutions\u002Fmeasurement\u002F","Media Effectiveness & MMM",{"page":70,"link_text":73},{"ID":71,"post_author":42,"post_date":72,"post_date_gmt":72,"post_content":44,"post_title":73,"post_excerpt":44,"post_status":46,"comment_status":47,"ping_status":47,"post_password":44,"post_name":74,"to_ping":44,"pinged":44,"post_modified":75,"post_modified_gmt":75,"post_content_filtered":44,"post_parent":76,"guid":77,"menu_order":52,"post_type":53,"post_mime_type":44,"comment_count":54,"filter":55,"url_path":78},244,"2020-12-21 14:32:54","CRO","cro","2026-04-13 10:27:20",24873,"\u002F?page_id=244","\u002Fdigital-experience\u002Fcro\u002F",{"page":80,"link_text":88},{"ID":81,"post_author":42,"post_date":82,"post_date_gmt":82,"post_content":44,"post_title":83,"post_excerpt":44,"post_status":46,"comment_status":47,"ping_status":47,"post_password":44,"post_name":84,"to_ping":44,"pinged":44,"post_modified":85,"post_modified_gmt":85,"post_content_filtered":44,"post_parent":52,"guid":86,"menu_order":52,"post_type":53,"post_mime_type":44,"comment_count":54,"filter":55,"url_path":87},374,"2021-01-11 16:25:32","Analytics","analytics","2026-09-28 11:36:16","\u002F?page_id=374","\u002Fanalytics\u002F","Enterprise Analytics",{"page":90,"link_text":93},{"ID":91,"post_author":42,"post_date":92,"post_date_gmt":92,"post_content":44,"post_title":93,"post_excerpt":44,"post_status":46,"comment_status":47,"ping_status":47,"post_password":44,"post_name":94,"to_ping":44,"pinged":44,"post_modified":95,"post_modified_gmt":95,"post_content_filtered":44,"post_parent":52,"guid":96,"menu_order":52,"post_type":53,"post_mime_type":44,"comment_count":54,"filter":55,"url_path":97},20655,"2023-01-04 14:22:27","CRM","crm","2025-03-13 14:52:45","\u002F?page_id=20655","\u002Fcrm\u002F",{"ID":99,"id":99,"title":100,"filename":101,"filesize":102,"url":103,"link":104,"alt":44,"author":105,"description":44,"caption":44,"name":106,"status":107,"uploaded_to":52,"date":108,"modified":108,"menu_order":52,"mime_type":109,"type":110,"subtype":111,"icon":112,"width":113,"height":114,"sizes":115},25129,"Aaron-Dicks2","Aaron-Dicks2.png",305948,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&q=90","\u002Faaron-dicks2\u002F","12","aaron-dicks2","inherit","2023-10-03 15:58:10","image\u002Fpng","image","png","\u002Fwp\u002Fwp-includes\u002Fimages\u002Fmedia\u002Fdefault.png",696,600,{"thumbnail":116,"thumbnail-width":117,"thumbnail-height":117,"medium":118,"medium-width":119,"medium-height":120,"medium_large":121,"medium_large-width":122,"medium_large-height":123,"large":124,"large-width":125,"large-height":126,"1536x1536":127,"1536x1536-width":128,"1536x1536-height":129,"2048x2048":130,"2048x2048-width":131,"2048x2048-height":132,"post-thumbnail":133,"post-thumbnail-width":134,"post-thumbnail-height":135,"12_col":136,"12_col-width":137,"12_col-height":138,"default_landscape":139,"default_landscape-width":140,"default_landscape-height":114,"default_portrait":141,"default_portrait-width":114,"default_portrait-height":140,"6_col_and_margin_short":142,"6_col_and_margin_short-width":134,"6_col_and_margin_short-height":138,"11_col_and_margin":143,"11_col_and_margin-width":144,"11_col_and_margin-height":138,"9_col_rectangle":145,"9_col_rectangle-width":146,"9_col_rectangle-height":147,"11_col":148,"11_col-width":149,"11_col-height":138,"staff_image_696_600":150,"staff_image_696_600-width":113,"staff_image_696_600-height":114,"rectangular_thumbnail":151,"rectangular_thumbnail-width":152,"rectangular_thumbnail-height":153},"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=640&q=90&w=640","640","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=scale&h=172&q=90&w=200",200,172,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=scale&h=662&q=90&w=768",768,662,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=1000&q=90&w=1892","1892","1000","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=scale&h=1324&q=90&w=1536",1536,1324,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=scale&h=1766&q=90&w=2048",2048,1766,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=1180&q=90&w=1860",1860,1180,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=870&q=90&w=2880",2880,870,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=600&q=90&w=800",800,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=800&q=90&w=600","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=870&q=90&w=1860","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=870&q=90&w=3080",3080,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=1400&q=90&w=2150",2150,1400,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=870&q=90&w=2640",2640,"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=600&q=90&w=696","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress%2Cformat&fit=crop&h=300&q=90&w=750",750,300,{"acf_fc_layout":155,"reduced":27,"top_overlap":156,"bottom_underlap":156,"disable_observer":-1,"heading":157,"cta_text":158,"cta_link":159,"items":160},"related_module","small","See more posts","See all articles","\u002Fblog\u002F",[161,175,184],{"type_key":16,"title":162,"excerpt":163,"to":164,"postedAt":165,"readingTime":166,"image":167,"authors":168,"category":172},"Conquering the fear of HTML coding","\u003Cp>This post has been written by Alex Bennett. Alex is a final year English student from the University of Nottingham and is currently part of a 10-week placement with Impression. The prospect of learning to code can be daunting. There are loads of different languages that all do different things in different ways, and the [&hellip;]\u003C\u002Fp>\n","\u002Fblog\u002Fconquering-the-fear-of-html-coding\u002F","2022-02-07T16:48:24",4,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F07\u002FR0FY9Cp6-050720211625512429_christopher-gower-291246-unsplash-scaled.jpg?auto=compress%2Cformat&fit=crop&h=640&q=90&w=640",[169],{"name":170,"image":171},"Team Impression","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F11\u002FImpression-Icon.jpg?auto=compress&fit=crop&fm=jpg&h=150&q=80&w=150&bg=CFE6F9",{"to":173,"name":174},"\u002Fblog\u002Fcategory\u002Fweb\u002F","Web",{"type_key":16,"title":176,"excerpt":177,"to":178,"postedAt":179,"readingTime":166,"image":180,"authors":181,"category":183},"Best Sketch plugins for 2018","\u003Cp>Discover the best Sketch plugins, where and how you can get them, and how to make the most of them. What is Sketch? Sketch is a professional design tool for Mac that utilises a fully vector-based workflow. Its simple layout, features and plugins make it a very capable replacement to other design tools like Photoshop. [&hellip;]\u003C\u002Fp>\n","\u002Fblog\u002Fbest-sketch-plugins-2018\u002F","2022-02-07T16:48:28","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F07\u002Fo5LExbve-050720211625518164_Sketch-blog-post-bg.jpg?auto=compress%2Cformat&fit=crop&h=640&q=90&w=640",[182],{"name":170,"image":171},{"to":173,"name":174},{"type_key":16,"title":185,"excerpt":186,"to":187,"postedAt":188,"readingTime":189,"image":190,"authors":191,"category":193},"Why There&#8217;s Never Been a Better Time to Invest in Your Business Website","\u003Cp>While a new website might seem like a hefty commitment, recent updates from Google and trends toward a more technically-advanced web approach mean that we suggest there’s never been a better time to review your online presence and invest in making it the best it can be. Here, we explain what you should be reviewing [&hellip;]\u003C\u002Fp>\n","\u002Fblog\u002Fweb-2018-theres-never-better-time-invest-business-website\u002F","2022-02-07T16:48:30",17,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F07\u002FQ77g1pcS-050720211625519452_business-websites.jpeg?auto=compress%2Cformat&fit=crop&h=640&q=90&w=640",[192],{"name":170,"image":171},{"to":173,"name":174},{"type":195,"style":196,"heading":28,"date":4,"updatedAt":197,"reading_minutes":198,"image":199,"imageAlt":28,"categories":200,"collections":384},"blog-post","light","2022-02-07T16:48:33",16,"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F07\u002Fhuo3bc0z-050720211625522068_clouds-sky-scaled.jpg?auto=compress%2Cformat&fit=crop&h=1180&q=90&w=1860",[201],{"id":10,"count":202,"description":203,"link":173,"name":174,"slug":204,"taxonomy":205,"parent":52,"meta":206,"acf":207,"head_links":208,"resource_count":52,"yoast_title":209,"yoast_meta":210,"yoast_json_ld":255,"_links":352,"path":173},38,"The way your website is designed and developed has a huge effect on the user experience and likelihood of conversion.\r\n\r\nImpression is an award winning digital agency which delivers results-focused, data driven web projects for a wide range of clients. Our in-house team of designers and web developers works closely with our marketing team to produce \u003Cem>performance websites\u003C\u002Fem> which don't just look great, they perform well across all channels, including search, too.\r\n\r\nCheck out our latest tips, advice, guides and insights into the world of web development now.","web","category",[],{"hidden":27,"sub_title_override":44,"title_override":44},[],"Web Development Blog | Tips, Advice & Guides | Impression",[211,213,216,219,222,225,228,230,232,234,237,240,243,246,249,252],{"property":212,"content":209},"title",{"property":214,"content":215},"description","Keeping up to date with the latest web design & dev trends, strategies, and industry movements can be difficult. Browse our latest web development blogs!",{"name":217,"content":218},"robots","index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1",{"property":220,"content":221},"canonical","https:\u002F\u002Fadmin.impressiondigital.com\u002Fblog\u002Fcategory\u002Fweb\u002F",{"name":223,"content":224},"og:locale","en-GB",{"property":226,"content":227},"og:type","article",{"property":229,"content":209},"og:title",{"property":231,"content":215},"og:description",{"property":233,"content":221},"og:url",{"property":235,"content":236},"og:site_name","Impression",{"property":238,"content":239},"og:image","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F06\u002FABFPXguH-Opengraph-BLUE.jpg?auto=compress%2Cformat&q=90",{"property":241,"content":242},"og:image:width",1200,{"property":244,"content":245},"og:image:height",630,{"property":247,"content":248},"og:image:type","image\u002Fjpeg",{"property":250,"content":251},"twitter:card","summary_large_image",{"property":253,"content":254},"twitter:site","@impressiontalk",{"@context":256,"@graph":257},"https:\u002F\u002Fschema.org",[258,266,275,285],{"@type":259,"@id":260,"url":260,"name":209,"isPartOf":261,"description":215,"breadcrumb":263,"inLanguage":265},"CollectionPage","https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fcategory\u002Fweb\u002F",{"@id":262},"https:\u002F\u002Fwww.impressiondigital.com\u002F#website",{"@id":264},"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fcategory\u002Fweb\u002F#breadcrumb","en",{"@type":267,"@id":264,"itemListElement":268},"BreadcrumbList",[269,273],{"@type":270,"position":31,"name":271,"item":272},"ListItem","Home","https:\u002F\u002Fwww.impressiondigital.com\u002F",{"@type":270,"position":274,"name":174},2,{"@type":276,"@id":262,"url":272,"name":236,"description":44,"publisher":277,"inLanguage":224,"potentialAction":279},"WebSite",{"@id":278},"https:\u002F\u002Fwww.impressiondigital.com\u002F#organization",{"@type":280,"target":281,"query-input":284},"SearchAction",{"@type":282,"urlTemplate":283},"EntryPoint","https:\u002F\u002Fwww.impressiondigital.com\u002Fsearch?q={search_term_string}","required name=search_term_string",{"@type":286,"@id":278,"name":236,"url":272,"logo":287,"image":293,"sameAs":294,"@context":298,"email":299,"foundingDate":300,"legalName":301,"vatID":302,"description":303,"telephone":304,"address":305,"location":312,"areaServed":345},"Organization",{"@type":288,"inLanguage":224,"@id":289,"url":290,"contentUrl":290,"width":291,"height":292,"caption":236},"ImageObject","https:\u002F\u002Fwww.impressiondigital.com\u002F#\u002Fschema\u002Flogo\u002Fimage\u002F","https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F06\u002FA5LuTDrq-Impression_Wordmark.png",920,176,"https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F04\u002FFAVxDeOS-Nottingham.jpg",[295,296,297],"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fimpression-digital-limited","https:\u002F\u002Fwww.facebook.com\u002Fimpression\u002F","https:\u002F\u002Fwww.instagram.com\u002Fimpressiontalk\u002F","https:\u002F\u002Fwww.schema.org\u002F","hello@impressiondigital.com","2012-11-07","Impression Digital Limited","GB186363774","Impression is an award-winning digital marketing agency based in the UK and USA. We offer SEO agency, PPC agency, Digital PR agency and Analytics services to companies of all sizes across the UK, North America, Europe and beyond. Get in touch with us if you think we can work together.","01158 242 212",{"@type":306,"streetAddress":307,"addressLocality":308,"addressRegion":309,"postalCode":310,"addressCountry":311},"PostalAddress","Fothergill House, 16 King Street","Nottingham","Nottinghamshire","NG1 2AS","United Kingdom",[313,322,334],{"@type":314,"name":315,"geo":316,"address":320,"photo":293,"telephone":321},"Place","Impression Digital - Nottingham",{"@type":317,"latitude":318,"longitude":319},"GeoCoordinates","52.95501401025914","-1.1494887460285232",{"@type":306,"streetAddress":307,"addressLocality":308,"addressRegion":309,"postalCode":310,"addressCountry":311},"+44 01158 242 212",{"@type":314,"name":323,"geo":324,"address":327,"photo":332,"telephone":333},"Impression Digital - London",{"@type":317,"latitude":325,"longitude":326},"51.50237208377361","-0.09229841534284115",{"@type":306,"streetAddress":328,"addressLocality":329,"addressRegion":330,"postalCode":331,"addressCountry":311},"201 Borough High St","Southwark","London","SE1 1JA","https:\u002F\u002Fcdn.impression.co.uk\u002F2021\u002F04\u002FwD0pPVWz-London.jpg","+44 020 7112 8148",{"@type":314,"name":335,"geo":336,"address":339},"Impression Digital - New York",{"@type":317,"latitude":337,"longitude":338},"40.726722746949","-74.00527778220652",{"@type":306,"streetAddress":340,"addressLocality":341,"addressRegion":342,"postalCode":343,"addressCountry":344},"160 Varick St","New York","NY","10013","USA",[346,349,351],{"@type":347,"name":348},"Country","Worldwide",{"@type":347,"name":350},"GBR",{"@type":347,"name":344},{"self":353,"collection":363,"about":366,"wp:post_type":369,"curies":380},[354],{"href":355,"targetHints":356},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories\u002F37",{"allow":357},[358,359,360,361,362],"GET","POST","PUT","PATCH","DELETE",[364],{"href":365},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fcategories",[367],{"href":368},"\u002Fwp-json\u002Fwp\u002Fv2\u002Ftaxonomies\u002Fcategory",[370,372,374,376,378],{"href":371},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fposts?categories=37",{"href":373},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fwhite_papers?categories=37",{"href":375},"\u002Fwp-json\u002Fwp\u002Fv2\u002Ftools?categories=37",{"href":377},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fwebinars?categories=37",{"href":379},"\u002Fwp-json\u002Fwp\u002Fv2\u002Fevents?categories=37",[381],{"name":382,"href":383,"templated":27},"wp","https:\u002F\u002Fapi.w.org\u002F{rel}",[],[],[387,389,391,392],{"path":388,"name":271},"\u002F",{"path":159,"name":390},"Blog",{"path":173,"name":174},{"path":393,"name":28},null,[395],{"id":10,"name":174,"path":173},{"title":397,"script":398,"meta":478,"link":507},"WordPress & Amazon Cloudfront Full Page Cache | Impression",[399],{"type":400,"key":401,"innerHTML":402},"application\u002Fld+json","yoast-json-ld",{"@context":256,"@graph":403},[404,427,435,438,446,450,468],{"@type":405,"@id":406,"isPartOf":407,"author":409,"headline":28,"datePublished":411,"dateModified":412,"mainEntityOfPage":413,"wordCount":414,"commentCount":52,"publisher":415,"image":417,"thumbnailUrl":419,"articleSection":420,"inLanguage":224,"potentialAction":421},"Article","https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fwordpress-amazon-cloudfront\u002F#article",{"@id":408},"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fwordpress-amazon-cloudfront\u002F",{"name":33,"@id":410},"https:\u002F\u002Fadmin.impressiondigital.com\u002F#\u002Fschema\u002Fperson\u002F30905680af47e405c37b9921abb28d99","2018-01-08T16:08:18+00:00","2022-02-07T16:48:33+00:00",{"@id":408},45,{"@id":416},"https:\u002F\u002Fadmin.impressiondigital.com\u002F#organization",{"@id":418},"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fwordpress-amazon-cloudfront\u002F#primaryimage","https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F07\u002Fhuo3bc0z-050720211625522068_clouds-sky-scaled.jpg?auto=compress%2Cformat&q=90",[174],[422],{"@type":423,"name":424,"target":425},"CommentAction","Comment",[426],"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fwordpress-amazon-cloudfront\u002F#respond",{"@type":428,"@id":408,"url":408,"name":397,"isPartOf":429,"primaryImageOfPage":430,"image":431,"thumbnailUrl":419,"datePublished":411,"dateModified":412,"description":432,"breadcrumb":433,"inLanguage":265},"WebPage",{"@id":262},{"@id":418},{"@id":418},"Use Amazon as a full page cache solution and enjoy the benefits of high availability and global coverage - all whilst reducing your site’s perceived response time to a fraction of what it was with this guide.",{"@id":434},"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002Fwordpress-amazon-cloudfront\u002F#breadcrumb",{"@type":288,"inLanguage":224,"@id":418,"url":419,"contentUrl":419,"width":436,"height":437},2560,1709,{"@type":267,"@id":434,"itemListElement":439},[440,441,443,445],{"@type":270,"position":31,"name":271,"item":272},{"@type":270,"position":274,"name":390,"item":442},"https:\u002F\u002Fwww.impressiondigital.com\u002Fblog\u002F",{"@type":270,"position":444,"name":174,"item":260},3,{"@type":270,"position":166,"name":28},{"@type":276,"@id":262,"url":272,"name":236,"description":44,"publisher":447,"inLanguage":224,"potentialAction":448},{"@id":278},{"@type":280,"target":449,"query-input":284},{"@type":282,"urlTemplate":283},{"@type":286,"@id":278,"name":236,"url":272,"logo":451,"image":293,"sameAs":452,"@context":298,"email":299,"foundingDate":300,"legalName":301,"vatID":302,"description":303,"telephone":304,"address":453,"location":454,"areaServed":464},{"@type":288,"inLanguage":224,"@id":289,"url":290,"contentUrl":290,"width":291,"height":292,"caption":236},[295,296,297],{"@type":306,"streetAddress":307,"addressLocality":308,"addressRegion":309,"postalCode":310,"addressCountry":311},[455,458,461],{"@type":314,"name":315,"geo":456,"address":457,"photo":293,"telephone":321},{"@type":317,"latitude":318,"longitude":319},{"@type":306,"streetAddress":307,"addressLocality":308,"addressRegion":309,"postalCode":310,"addressCountry":311},{"@type":314,"name":323,"geo":459,"address":460,"photo":332,"telephone":333},{"@type":317,"latitude":325,"longitude":326},{"@type":306,"streetAddress":328,"addressLocality":329,"addressRegion":330,"postalCode":331,"addressCountry":311},{"@type":314,"name":335,"geo":462,"address":463},{"@type":317,"latitude":337,"longitude":338},{"@type":306,"streetAddress":340,"addressLocality":341,"addressRegion":342,"postalCode":343,"addressCountry":344},[465,466,467],{"@type":347,"name":348},{"@type":347,"name":350},{"@type":347,"name":344},{"@type":469,"@id":470,"name":33,"image":471,"description":35,"sameAs":474,"url":477},"Person","https:\u002F\u002Fwww.impressiondigital.com\u002F#\u002Fschema\u002Fperson\u002F30905680af47e405c37b9921abb28d99",{"@type":288,"inLanguage":224,"@id":472,"url":473,"contentUrl":473,"caption":33},"https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress&fit=fit&fm=jpg&h=96&q=90&w=96069d6f196ce202c9674a411bef4b07a3","https:\u002F\u002Fimages.impression.co.uk\u002F2023\u002F10\u002FAaron-Dicks2.png?auto=compress&fit=fit&fm=jpg&h=96&q=90&w=96",[475,476],"https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Faarondicks\u002F","https:\u002F\u002Fx.com\u002Fhttps:\u002F\u002Ftwitter.com\u002Faarondicks","https:\u002F\u002Fwww.impressiondigital.com\u002Fabout\u002Four-team\u002Faaron-dicks\u002F",[479,480,481,483,484,485,486,487,488,491,493,495,497,498,499,500,502,503,506],{"name":214,"content":432},{"name":217,"content":218},{"property":223,"content":482},"en_GB",{"property":226,"content":227},{"property":229,"content":397},{"property":231,"content":432},{"property":233,"content":408},{"property":235,"content":236},{"property":489,"content":490},"article:publisher","https:\u002F\u002Fwww.facebook.com\u002Fimpression",{"property":492,"content":411},"article:published_time",{"property":494,"content":412},"article:modified_time",{"property":238,"content":496},"https:\u002F\u002Fimages.impression.co.uk\u002F2021\u002F07\u002Fhuo3bc0z-050720211625522068_clouds-sky-scaled.jpg?auto=compress%2Cformat",{"property":241,"content":436},{"property":244,"content":437},{"property":247,"content":248},{"name":501,"content":33},"author",{"name":250,"content":251},{"name":504,"content":505},"twitter:creator","@https:\u002F\u002Ftwitter.com\u002Faarondicks",{"name":253,"content":254},[]]