# PostHog for search traffic: from a landing page to the signup

You want proof that search clicks turn into signups. PostHog can show the landing path that brought a person and whether they later signed up. This guide shows the setup, the funnel and the two monthly checks that keep you honest.

Updated 2026-09-14 · Source: https://porteur.ai/guides/posthog-for-search-traffic

## What PostHog gives you for organic search

PostHog is product analytics. Its Web analytics dashboard adds traffic readouts built from the same events. That makes it good for joining the first visit to later product actions.

- Channel types include Organic Search. PostHog infers these from the referrer and any UTM values.
- A $pageview event carries $current_url, $pathname and $referring_domain.
- A person record carries initial referrer and initial UTM properties from their first visit.
- Funnels can start on a landing page path and end on a product event, such as signup, and be broken down by initial referring domain.
- HogQL is its SQL, so you can query events and people together when you need a custom cut.

Your goal: track a visit from Organic Search on a landing page, then a signup later. You want to see which landing pages create people who go on to sign up, not just which pages get sessions.

## Set up clean channel attribution and UTMs

Start with clean sources. You need referrers for search and UTMs for your own campaigns. Keep them separate and consistent.

1. **Use PostHog’s Web analytics dashboard** Confirm that Organic Search appears as a channel type and that $referring_domain is populated for google.com, bing.com and others.
2. **Standardise your UTMs** Use Google’s Campaign URL Builder format: utm_source, utm_medium, utm_campaign, utm_term, utm_content. Use lowercase and a fixed naming scheme.
3. **Tag only external links** Add UTMs to links you place off-site, such as a newsletter or partner page. Never add UTMs to internal links on your own site.
4. **Avoid indexed UTM URLs** UTM URLs you share can get linked and indexed. Set a canonical tag on those URLs to the clean version, for example canonical https://yourproduct.com/pricing.

> Never use UTMs on internal links. An internal UTM starts a new session and breaks attribution.

## Keep the first landing page on the person

PostHog stores initial referrer and UTMs on the person. Add the first landing page as a person property too. You need it to answer first-touch questions reliably.

1. **Choose the property name** Use first_landing_page_path for the path only, for example /guides/getting-started. Or first_landing_page_url for the full URL.
2. **Set it once on first visit** On the first $pageview for a new visitor, set the person property if it does not exist. Use a set once method so later visits do not overwrite it.
3. **Capture the value from $pathname** Read the path from your router or window.location.pathname and write that value. Keep it short and stable. Avoid query strings.
4. **Test on staging** Create a fresh test browser profile. Arrive from a google.com search result. Check the person profile stores the initial referrer and your first_landing_page_path once.

```javascript
// Pseudocode: set once on first pageview
posthog.onFeatureFlags(function() {
  // Run after PostHog is ready in your app
  const path = window.location.pathname
  // Implement a guard so you only set this when the property is empty
  posthog.setPersonPropertiesOnce({ first_landing_page_path: path })
});
```

A correct profile shows initial referrer as google.com, initial UTM fields empty, and first_landing_page_path as /guides/getting-started after a first visit from search to that page.

## Build the funnel: landing path to signup broken down by search referrer

You want a funnel that starts on a landing path and ends on signup. Then break it down by initial referring domain to isolate Organic Search performance by source.

1. **Define the end event** Pick your signup event. Use the existing product event you track for signup or account creation. Mark it clearly.
2. **Set the start step** Use $pageview where $pathname starts with your landing area, for example /guides or /pricing. Or pick a single page like /guides/getting-started.
3. **Choose the conversion window** Keep it long enough to cover typical research and return visits. A few weeks is common on SaaS. Use the same window each month.
4. **Break down by initial referring domain** Use the initial referring domain person property as the breakdown. This groups people by first touch, for example google.com or bing.com.
5. **Add a secondary breakdown by first_landing_page_path** When you want the page-level view, add your first landing page person property as a second breakdown. This shows which paths create people who later sign up.

A useful cut filters the funnel to initial referring domain contains google.com and shows the top first_landing_page_path values by conversion rate to signup.

For one page focus, build a micro funnel: $pageview where $pathname equals /pricing to signup. Break it down by initial referring domain. You will see whether /pricing works for Organic Search visitors from google.com compared to direct or email.

## Answer the two monthly questions

Each month, answer two questions. Keep a short note in the repo with links to the saved reports. Consistency matters more than perfect precision.

- Which landing pages from Organic Search brought people who later signed up, and what changed since last month
- Which pages get Google clicks but start no signups, and what to fix next

1. **Pages that bring future signups** Open your landing-to-signup funnel. Filter to initial referring domain contains google.com. Save the table by first_landing_page_path with absolute signups and rate. Note the top risers and fallers month on month.
2. **Pages that win clicks but not people** Open Search Console’s performance report by page. Export pages with clicks in the last 28 days. Compare that list to your PostHog funnel table. Pages with clicks but no people who later sign up go on your fix list.
3. **Pick one fix per page** If a page wins clicks and bounces, check intent, offer and internal links. For /guides/getting-started, add a clear CTA and a path to a relevant signup. Recheck next month.
4. **Keep timing aligned** Run both reports for the same 28 day window. Search Console has data lag and anonymisation. Do not try to reconcile clicks to sessions one by one.

## What Search Console and analytics say together

Search Console gives the query, the landing page, impressions and clicks. Analytics tells you what visitors did after the click. Joined by landing page, you get action from both.

- Use Search Console to find queries and pages with rising or falling clicks.
- Use PostHog to see if those landings create people who later sign up.
- Prioritise pages with clicks and poor downstream performance. Protect pages with modest clicks and excellent downstream signup rates.

If you also run GA4, you can add the Search Console link there to see Google organic search reports by landing page. GA4 will still not tell you who signed up later without joining to product events. That is why you keep this in PostHog for the person-level view.

## Keep your data usable: consent, channels and limits

- EU consent: analytics that set cookies need consent under ePrivacy. Cookieless and server-side options exist. Any rate from consented sessions undercounts.
- Channel rules: keep utm_source and utm_medium consistent so your own campaigns do not pollute Organic Search. Fix typos at source, not in reports.
- Attribution in plain words: first touch credits the visit that brought the person. Last touch credits the visit before the conversion. For product sites, first touch by landing page is the useful lens for SEO.
- Do not chase exact matches: sessions and Search Console clicks never reconcile exactly. A click can start no session, a session can follow several clicks, consent tools drop sessions.

> Do not try to fix differences between clicks and sessions. Use trends and comparisons in the same window.

## Example: HogQL for first-touch landing page to signup

You can write a HogQL query to list signups by a person’s first landing page and initial referring domain. This mirrors the funnel and gives you a table you can export.

```sql
-- Pseudocode HogQL: adapt names to your events and properties
SELECT
  person.properties["first_landing_page_path"] AS first_landing_page,
  person.properties["initial_referring_domain"] AS initial_ref_domain,
  countIf(event = 'signup') AS signups
FROM events
WHERE timestamp >= now() - interval 28 day
GROUP BY first_landing_page, initial_ref_domain
ORDER BY signups DESC
LIMIT 50;
```

A useful variant filters initial_ref_domain to google.com and orders by signups per unique person who first landed on that path in the period. Keep the period fixed at 28 days for month-on-month notes.

## Fix the pages that start no signups

Some pages will get clicks and create no future signups. Work on the page, not on the report. Start with what a searcher sees and how they move next.

- Match intent: if the query is “how to integrate X with Y”, the landing must teach that and link to a guided signup.
- Surface the offer: add a clear next step. For example, a sticky bar on /guides/getting-started with “Try it free” that leads to /signup.
- Link forward: add internal links to relevant product pages from content pages. Do not rely on a buried footer link.
- Speed matters: keep LCP under 2.5 seconds as of 2026. Slow pages bleed visitors before the CTA.

A fixed page shows stable traffic from google.com and a rise in people whose first_landing_page_path is that page and who reach the signup event within your window. Keep notes so you can credit the change next month.

## Questions

### Do I need GA4 if I use PostHog for SEO analysis

You can run this flow with PostHog and Search Console. PostHog shows what visitors did after landing. Search Console shows queries and clicks by page. If you also run GA4, link Search Console there for Google’s organic reports, but keep the person-level signup view in PostHog.

### How do I see Organic Search in PostHog

Open the Web analytics dashboard. Channels include Organic Search, inferred from referrers and UTMs. In funnels, use a breakdown by initial referring domain to isolate google.com or bing.com first touches.

### How long should I wait between landing and signup in the funnel

Pick a conversion window that fits your buying cycle and keep it fixed. For a SaaS, a few weeks is common. Use the same window every month so the trend is comparable.

### What if a page gets clicks but shows no signups in PostHog

Check whether you store the first landing page on the person. Without that property you cannot join first touch to a later signup. If it is present, review the page’s intent match, offer and internal links. Fix the page and recheck next month.

### Why do clicks in Search Console not match sessions or people in analytics

They never reconcile exactly. A click can start no session, a session can follow several clicks, and consent tools drop sessions. Use the same 28 day window and compare trends and rankings, not one-to-one counts.

### Can I attribute revenue from search in PostHog

Yes, if your payment event is tracked and joined to the person’s first landing page. Build a report from that join and you can answer what a search click earns. Keep the period fixed and compare month on month.

## Read next

- [How to track signups from search, by landing page](https://porteur.ai/guides/track-signups-from-search): Join Search Console with analytics to see which landing pages bring signups from organic search, and which pages get clicks but convert nobody.
- [UTM parameters: use them without breaking your search data](https://porteur.ai/guides/utm-parameters): What UTM parameters mean, when to use them, how GA4 reads them, and the rules that keep your search and referral data clean on a small site.
- [Landing page SEO: one page, one search, one promise](https://porteur.ai/guides/landing-page-seo): Give each landing page a target query, a clear promise, proof, and one CTA. Keep it from clashing with your home page. Steps and examples inside.
- [Pages that get search clicks and no signups: the three causes](https://porteur.ai/guides/search-traffic-that-does-not-convert): Most search clicks that do not turn into signups fall into three causes. See which one you have, how to prove it, and what to change on the page.
- [Organic search traffic in GA4: where it is and how to read it](https://porteur.ai/guides/organic-search-traffic-in-ga4): See organic search in GA4, read source and medium, landings and key events, link Search Console, and build a one‑screen monthly view that you can act on.
- [Linking Search Console to GA4: what you get and what you do not](https://porteur.ai/guides/link-search-console-to-google-analytics): Link Search Console to GA4, find the two reports, read queries next to landing pages, and know why clicks and sessions never match.
- [Organic traffic](https://porteur.ai/glossary/organic-traffic): Organic traffic is visits from unpaid search results. See how it is counted, where it differs from ads and direct, and what to do to grow it.

Drop your homepage URL and see which landing pages in your space get clicks today and which rivals they belong to, free in about thirty seconds, then wire it to your own data later in Porteur. Free check: https://porteur.ai/
