ElmsPark Guides
PageMotor Setup Guide

Installing PageMotor on SiteGround

A plain-English walkthrough for SiteGround's Site Tools, including the one job SiteGround makes you do that other hosts do not: taming its cache.

โฑ ~20 minutes ๐Ÿงฐ One copy-paste, no real coding โš  Cache taming required
Before you start, have these ready: a SiteGround hosting account, the PageMotor files (the .zip you downloaded), and the name of your website. SiteGround uses its own panel called Site Tools, not cPanel, and it is per-site: open it for the right website via Client Area โ†’ Websites โ†’ Site Tools.

On a cPanel host instead? Use the Bluehost, HostGator or GoDaddy guide; the steps there are simpler.

Use this guide with any AI assistant

Download it as a prompt file, paste it into Claude, ChatGPT, Gemini or any LLM, and it will walk you through every step interactively.

Download as LLM prompt

1Put PageMotor on your site

  1. In Site Tools, open Site โ†’ File Manager and go into public_html, your site's folder.
  2. Click the File Upload icon in the toolbar and upload your PageMotor .zip. (SiteGround's File Manager has no upload size limit, so the zip goes up in one piece.)
  3. Right-click the uploaded zip and choose the Extract option (the exact wording can vary), extracting into public_html.
When it is done you should see pagemotor.php, a lib folder, and a file called config-sample.php sitting in public_html. (If extracting gave you a single folder called pagemotor instead, open it, select everything inside, choose Move and move it all into public_html, then delete the empty folder and the zip.) Good. We use that sample file in step 4.

2Tame SiteGround's cache

SiteGround runs a full-page cache (Dynamic Cache) on every site. It is on by default, there is no off switch in Site Tools, and its only built-in manners are for WordPress and Drupal. Anything else, PageMotor included, gets cached like an ordinary page for up to 12 hours: the install screen, the admin area, even the login. Skip this step and the install will feel haunted: pages that refuse to change, an admin screen that will not appear, a login that goes round in circles.

  1. In File Manager, look inside public_html for a file called .htaccess. If it exists, right-click โ†’ Edit; if not, create it (New File).
  2. Paste this at the very top and save:
# Temporary while installing PageMotor: stops SiteGround's
# full-page cache serving stale copies of your pages.
<IfModule mod_headers.c>
  Header set Cache-Control "private"
</IfModule>
  1. Now flush the cache once: Site Tools โ†’ Speed โ†’ Caching โ†’ Dynamic Cache, then the Flush Cache action. SiteGround only applies .htaccess caching changes after a flush, so this part is not optional.
How to check it worked: load any page of your site and look at the x-proxy-cache response header (browser dev tools โ†’ Network, click the page request). BYPASS or MISS is what you want. HIT means the cache is still answering; flush again.

3Create your database

PageMotor keeps your content in a database. SiteGround does this differently from cPanel hosts: it chooses the names for you.

  1. In Site Tools, open Site โ†’ MySQL. On the Databases tab, click Create Database. SiteGround generates the database name (something like dbabc123xyz); you do not get to choose it.
  2. Switch to the Users tab and click Create User. The username and password are generated too, and the password is shown once, in a notice. Copy it somewhere safe now.
  3. Still under Users, find your new user and choose Manage Access (or Add New Database): pick your new database, choose All Privileges, and confirm.
The step nearly everyone misses on SiteGround: a freshly created user has access to nothing. If you skip the Manage Access part, PageMotor will be turned away at the door. You will need three things in the next step: the generated database name, the generated username, and the password from the notice.

4Fill in config.php

This is the file that connects PageMotor to the database you just made.

  1. In File Manager, find config-sample.php next to pagemotor.php.
  2. Right-click it and choose Rename. Rename it to exactly config.php. This rename is the step that switches PageMotor on.
  3. Right-click config.php and choose Edit.
  4. Put the three generated values into DB_NAME, DB_USER and DB_PASSWORD. Leave the rest as they are, then Save.

Here is what the database section of your config.php should look like once filled in. Edit the existing lines to match, using the values Site Tools generated for you; you are changing three values, not pasting this block in:

// Database connection info:
define('DB_NAME', 'dbabc123xyz');          // the generated name from Site Tools
define('DB_USER', 'the-generated-username'); // from the Users tab
define('DB_PASSWORD', 'the-password-from-the-notice');
define('DB_HOST', 'localhost');            // correct for SiteGround
define('DB_CHARSET', '');
define('DB_COLLATE', '');
define('DB_TABLE_PREFIX', 'pm_');
define('DB_FLAGS', '');
define('PM_HTML_CHARSET', '');
Two things to double-check: the file must be named exactly config.php (not config-sample.php, and not config.php.txt), and it must sit in the same folder as pagemotor.php.

5Finish in your browser

  1. Flush Dynamic Cache once more (Site Tools โ†’ Speed โ†’ Caching), so your first visit is answered by PageMotor and not by an old cached copy.
  2. Visit your website. On this first visit PageMotor quietly sets up its content for you.
  3. Go to yoursite.com/admin/ and create your admin user.
  4. Straight after creating it: flush Dynamic Cache again, and clear your browser's cookies for the site, then log in. This one-two is what prevents the login loop described in the troubleshooting below.
That is it. You are in. If the login misbehaves anyway, it is the cache; the first troubleshooting item below walks you out of it.

6Give your visitors the cache back (optional)

The step 2 kill switch turns SiteGround's page cache off for everyone, which is a perfectly fine place to stop for a small site; it will still be quick. If you want visitors to get cached pages for speed, swap the kill switch for a scoped rule that keeps the cache away from the admin area only:

# Cache public pages, but never the PageMotor admin.
<If "%{THE_REQUEST} =~ m#/admin#">
  <IfModule mod_headers.c>
    Header set Cache-Control "private"
  </IfModule>
</If>

If something is not working

Open these only if you hit them. On SiteGround, when in doubt, it is the cache.

I see "The user login cookie was not created!"

most commonYour browser really did get the cookie; you can even see it in dev tools. The problem is the next page: SiteGround's cache answers it with an old copy saved before you logged in, so PageMotor never runs and never sees your cookie. Break the loop in this order:

The admin screen will not appear on a fresh install

Same cause: the cache is serving an old copy of /admin/ from before PageMotor was ready. The giveaway is when a friend on a different connection can see the screen you cannot; that is the cache talking, not your install. Do the step 2 kill switch if you have not, flush Dynamic Cache, and reload. Check the x-proxy-cache header reads BYPASS or MISS, not HIT.

My changes do not show up

Flush Dynamic Cache in Site Tools. If a page still will not budge, look at its x-proxy-cache response header: HIT means the cache answered, so flush again and re-check your .htaccess rule from step 2 (and remember each .htaccess change itself needs a flush to take effect).

I see "HTTP ERROR 500" or a blank white page

Almost always a config.php problem. Check the file is named exactly config.php (not still config-sample.php), that it sits next to pagemotor.php, and then read the real reason in Site Tools โ†’ Statistics โ†’ Error Log. If it says config.php "No such file or directory", this is your fix.

The log says "Access denied" or "MySQLi Connection Error"

PageMotor reached the database step but could not get in. On SiteGround this is nearly always the privileges step:

I cannot find config-sample.php

It ships inside the PageMotor download, right next to pagemotor.php. Two things to check: the files may have landed in a pagemotor subfolder when the zip extracted, in which case move everything in it up into public_html (see the note in step 1); and if the folder is genuinely empty, the zip did not extract completely, so repeat step 1.

๐Ÿ“ง Will your site send email? Contact forms, sign-ups and password resets need a proper mail service or they land in spam. Follow the companion guide: Set up reliable email with Mailgun.