Two very different jobs. apply.guilford.edu is a Slate portal that already carries Guilford's container — the work there is configuration, not installation. giving.guilford.edu is a WordPress site with no analytics on it whatsoever, which is exactly why the giving funnel has never had a baseline.
Read from the live sites on 27 Jul 2026. Worth doing before any ticket is raised — two of these need nothing installed, and one of them needs everything.
| Property | Platform | GTM container | Consent | Where it stands |
|---|---|---|---|---|
| www.guilford.edu | Drupal | GTM-5BZ4942 | None | The reference implementation. Guilford's own container. |
| apply.guilford.edu | Technolutions Slate | GTM-5BZ4942 | None | Same container as the main site. Nothing to install. |
| www.giving.guilford.edu | WordPress · Divi | Nothing | None | No GTM, no GA4, no gtag, no pixel. The gap. |
| guilfordquakers.com | Sidearm Sports | TW6R675 · K3TH4CC | None | Vendor containers only — neither is Guilford's. See the separate runbook. |
Guilford's container is GTM-5BZ4942 — it is on both the main site and the Slate portal.
Neither container on the athletics site matches it, so GTM-K3TH4CC is not Guilford's.
That runbook's "check whether you already own it" step now has an answer: you do not, and the install
there is genuinely needed.
The measurement framework records "no baseline anchors, giving-side — the gap." This is the cause, not a symptom: there has never been a tag on the giving site to produce one. Everything the campaign wants to report on starts the day this ships.
Technolutions Slate. The container is present on portal pages, so this section is configuration plus one defect that is quietly costing you attribution on paid media.
Only the root of the domain redirects. Everything below it is the live portal. But that root redirect drops the query string:
apply.guilford.edu/?utm_source=meta&utm_medium=paid&utm_campaign=fall26 → 302 http://www.guilford.edu/admission/ (query string gone — and an insecure hop) → 301 https://www.guilford.edu/admission/ → 301 https://www.guilford.edu/admissions (lands with no campaign data)
Any ad, email or print QR code pointing at apply.guilford.edu arrives at the
admissions page as Direct. With Encoura running display and paid social, this is live budget
reporting as untracked traffic. Fix: make the root redirect preserve the query string and go
straight to https://www.guilford.edu/admissions in one secure hop.
| URL | What it is | Event to fire |
|---|---|---|
| /apply/?pk=UNDER | The undergraduate application itself | apply_start → apply_submit |
| /register/?id=… | Inquiry and event registration forms | request_info_submit |
| /portal/campus_visit | Campus visit scheduling | visit_scheduled |
Because Slate already renders GTM-5BZ4942, adding conversion tracking is done entirely
inside the container — no Technolutions ticket. Build triggers on the three paths above, and read the
thank-you/confirmation step for the submit events rather than the button click, so you count completions
and not intentions. If you need richer data than the URL exposes, Slate's custom source code per
form can push a dataLayer object; that does need a Slate admin.
UA-9584163-1 is still rendered alongside the container here and on the main site.
Universal Analytics stopped processing in July 2023, so it collects nothing — but leave it until you have
confirmed nothing internal still points at it, then strip it from the Slate template and the Drupal theme
together.
WordPress on the Divi theme with a grow-pro child theme, LiteSpeed
caching, PHP 8.1. Guilford controls this outright, so no vendor is involved. Currently carries
no analytics of any kind.
Divi ships a built-in code injection panel: Divi → Theme Options → Integration, then "Add code to the < head > of your blog." Paste the head snippet, save. It applies site-wide and survives Divi updates. Use this unless you need a managed dataLayer.
A plugin such as GTM4WP adds the container and emits a structured dataLayer — post type, author, categories, form submissions — without hand-writing pushes. Worth it if the giving site grows campaign landing pages you want to segment.
header.php Only if you already maintain itThe grow-pro child theme can hold the snippet via wp_head. Most robust, but
it is a code deploy and it is the one route that a careless theme update can silently revert.
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5BZ4942');</script>
<!-- End Google Tag Manager -->
1 · Purge after saving. The site runs LiteSpeed Cache and served us a cache hit. Until you purge all caches, you will keep loading a pre-tag copy of the page and conclude the snippet failed.
2 · Exclude GTM from JS optimisation. LiteSpeed's combine/defer options will happily reorder or
inline the container and break consent ordering. Add googletagmanager.com to the JS excludes
before you start debugging anything else.
All three Guilford-controlled properties share one container, so these are configured once and inherited everywhere.
In GA4: Admin → Data streams → the guilford.edu web stream → Configure tag settings → Configure your domains. List every Guilford-controlled domain, and fire the same measurement ID from the container on each. Both halves are required — the domain list lets the linker pass the client ID, the shared ID lets GA4 stitch the session.
Donations leave for givecampus.com/schools/GuilfordCollege/donate. That is
third-party SaaS: you cannot put the container on it, and cross-domain linking to it will not work
unless GiveCampus explicitly supports the linker. So measure the seam, do not pretend it isn't there:
donation_start as an outbound click on the GiveCampus link, from the giving
site. This you fully control.donation_complete and gift value, use GiveCampus's own Google Analytics
integration in their admin, pointed at the same GA4 property.No Guilford property has a consent gate today. Because they share GTM-5BZ4942,
do not add a banner per site: create one Consent Mode default tag on the built-in
Consent Initialization — All Pages trigger, denying everything except security_storage.
GTM guarantees it runs before every other tag in the container, on every property, regardless of what each
platform does with script order — which is the only reliable option when Slate and Divi both control
their own <head>.
The banner built for the guilford.edu redesign already pushes a consent_update
dataLayer event with the same category names, so it drives the update on every domain unchanged.
All of it in Preview first. Publishing to a shared container touches four properties at once, so a mistake here is not contained to one site.
GTM Preview against www.giving.guilford.edu. If Tag Assistant will not connect, purge LiteSpeed before assuming the snippet failed.
The Consent Initialization tag must appear above everything else, with GA4 tags blocked until consent is granted. This is the single most common mistake.
GA4 DebugView on property 359308554: page views from both new hostnames within seconds.
Click guilford.edu → apply.guilford.edu. The URL should carry _gl= and DebugView should not show a new session_start.
Load apply.guilford.edu/?utm_source=test. Until the root redirect is fixed, the parameter will be gone at the destination — this is your regression test for that fix.
Walk /apply/?pk=UNDER and /portal/campus_visit and confirm the events land on the confirmation step, not the button click.
Click the GiveCampus donate link and confirm donation_start fires before the browser leaves.
After 48h, the new domains should stop appearing as referrals in Traffic acquisition. They will not disappear retroactively — watch for new rows to stop.
apply.guilford.edu root redirect to preserve the query string over a single
HTTPS hop. Cheapest fix here, and it is currently costing live paid-media attribution.googletagmanager.com from JS optimisation.UA-9584163-1 from the Slate template and the Drupal theme once nothing
internal still references it.