Before You Begin
Before you begin, understand that Google Ads only have the affectiveness in the amount of time you put into the setting up and cradling the ad Campaign. On top of that, after your score reaches something beyond 80 percent effectiveness you have to then put in a significant amount into daily spending sometimes something beyond 30 to 40 dollars for daily average. The goal of the add should be not to derive traffic because it tends to be useless with google adds but setup triggering conversions that Google will see and attempt to recreate. So this blog is for sales driven campaigns and the tips needed to implement it successfully. BONUS: we explore how well implemented metadata can improve exposure to Modern search engines and large language models (LLMs).
What Kind of Web Application
Any application that needs to drive sales or traffic for a modern web application of any kind. However, the goal in this blog is to look into web applications which require authentication before checkout. In here we will cover campaign design, conversion architecture, frontend implementation, and validation—ensuring Google Ads optimizes toward real revenue actions rather than vanity metrics. The approach is production-oriented and suitable for developers or technical practitioners managing paid acquisition for a small-to-large service-based business.
Google Ads does not expose LLM's searchability like ChatGPT, But Will Combat That
How LLMs like ChatGPT determine what to choose when user instructs them to search the internet. When LLM do the searching for you they do indeed evaluation, not ranking. but that ranking comes from priority order like this:
- Official business website
- Reviews + reputation
- Google Business Profile / Maps listing
- Well-known local review platforms
- Local news / city guides Therefore we will focus on:
- Structured Metadata (JSON-LD)
- Programmatic Schemas
- Suggestion (Not in this article): create google business account
Aggregators / SEO blogs (lowest)
Context and Problem Statement
The application allows users to:
- Browse curated offerings
- Add items to a cart
- Complete checkout behind authentication
- Submit custom requests via forms
- (or things like: Initiate phone calls directly from the site)
Challenges addressed:
- Google Ads auto-detected conversions fail in Web App (React) SPAs
- Checkout and confirmation pages are gated behind authentication
- Incorrect default conversion goals (page views, engagement) degrade bidding
- Smart Campaign and Google-hosted conversions introduce noise
- Low initial budget requires conservative, high-intent configuration
Goals and Non-Goals
Goals
- Create a Search campaign optimized for real sales and leads
- Ensure Google Ads bids only on meaningful conversion signals
- Implement manual conversion tracking in a Web App (React) application
- Maintain full developer control over conversion firing
- Avoid wasted spend from low-intent traffic
Non-Goals
- Performance Max or Display campaigns
- Broad awareness or branding initiatives
- Automated keyword or asset generation
- Offline conversion imports
- Merchant Center / Shopping Ads
What Are The Prerequisites?
- Google Ads account with conversion tracking access
Conceptual Architecture
At a high level:
-
Google Ads Search Campaign When you begin setting up a Google Ads Search campaign with Sales as the objective, the first critical decision is to ensure the campaign is optimized for real revenue actions rather than default engagement signals. During initial setup, Google Ads will often preselect account-level conversion goals such as page views, add-to-cart events, or generic interactions, which can dilute bidding and inflate performance metrics. To avoid this, the campaign should be explicitly configured to use campaign-specific conversion goals and paired with a Maximize Conversions bidding strategy
-
When Setting Up the Ad Goals
- Objective: Sales
- Bidding: Maximize Conversions
- Conversion scope: Campaign-specific
- NOT: Website Traffic
- NOT: Awareness
- NOT: Leads (unless your booking flow is broken)
-
With Conversion Tracking
- Website conversions fired manually via
gtag - One conversion per meaningful business outcome
- Fired only after success conditions are met
- Website conversions fired manually via
-
Frontend (React SPA)
- Conversion events triggered in lifecycle hooks or handlers
- No reliance on page load auto-detection
- Authentication does not block tracking
Conversion Strategy Design
The campaign optimizes toward three primary business outcomes:
-
Purchase
Completed checkout, confirmed via a post-purchase confirmation page. -
Custom Tour Form Submission (Lead)
Successful submission of a custom tour request form. -
Click-to-Call
User clicks a phone link with intent to call.
Supporting (secondary) signals are tracked for analysis only and never used for bidding.
Google Ads Conversion Setup
Each conversion is created in Tools & Settings → Conversions as a Website or Call from Ads action. Instead of allowing google ads to create automatic conversions set up a tag for full control and precisiosn.
Key principles:
- Manual setup is required
- Each conversion receives a unique conversion label
- Conversion labels are not secrets and must be used client-side
- Auto-detected or page-load conversions are avoided
What to look for in each conversion:
Conversion ID: 11283555555 Conversion Label: GXBlCIPu78sYEM7Gs4Qq
Frontend Conversion Implementation (React)
A good shared utility file centralizes Google Ads identifiers setup for tracking in a large application. use the 'AW-12345678910' which is the application google ads tag and after it the conversion label 'GXBlCIPu78sYEM7Gs4Qq' to set up a conversion:
src/utils/googleAds.js
export const GOOGLE_ADS_ID = "AW-12345678910"; //EXAMPLE: AW-12345678910/hfpICK6z7NcbEM8Rd10q export const purchaseTag = `${GOOGLE_ADS_ID}/PURCHASE_LABEL`; export const customTourTag = `${GOOGLE_ADS_ID}/CUSTOM_TOUR_LABEL`; export const callClickTag = `${GOOGLE_ADS_ID}/CALL_CLICK_LABEL`; export const addToCartTag = `${GOOGLE_ADS_ID}/ADD_TO_CART_LABEL`;
Purchase Conversion (Click Manually with code)
Fired when the authenticated user reaches the confirmation page after a successful checkout. Implementation like this needs to be added in a confirmation page or final stage of a purchase or cart or email, for which ever conversion you are tracking. After one fire of this code Google will register the Conversion as active.
Confirmation Page
import React, { useEffect } from "react"; import { purchaseTag } from "../utils/googleAds"; const ConfirmationPage = () => { useEffect(() => { if (window.gtag) { window.gtag("event", "conversion", { send_to: purchaseTag, value: 900, currency: "USD" }); } }, []); return null; }; export default ConfirmationPage;
Notes:
- Authentication does not block validation
- Google Ads only requires the event to fire once
- Conversion status remains “Inactive” until the first real or test fire
how to make sure that created conversions are added to campaign
For me specifically I was confused about making sure that the conversions were implemented in the newly created campaign. Check if they already exist in your Goals with these settings, if not and or you do now know what conversions are then move on forwarded to the next section.
-
Check Account-Level Settings (Goals) Go to Goals > Conversions > Summary in your Google Ads account. Here you'll see all your conversion actions, categorized. Ensure the one you want is listed and active.
-
Apply to a Specific Campaign For a New Campaign: During setup, select your desired conversion goals (or create new ones). For an Existing Campaign: Go to Campaigns. Select the campaign(s) you want to edit. Click Edit > Update conversion goals (for bulk) or go to Settings > Goals for the specific campaign. Choose "Use campaign-specific goal settings" and select your conversion action(s) as Primary (for bidding) or Secondary (for reporting).
Primary vs Secondary Conversions
The conversion must be graded by primary and secondary. Here is a good approach to choose what is primary and what is secondary: > Rule: If it does not directly generate revenue or a qualified lead, it is not Primary.
Primary (Used for Bidding)
- Purchase
- Custom Tour Form Submission
- Click-to-Call (manual)
Secondary (Observation Only)
- Add to Cart
- Contact Page
- Page Views
- Engagement
- Directions
- Google-hosted Smart Campaign actions
Campaign Creation: Search (Sales Objective)
- Objective: Sales
- Campaign Type: Search
- Reach: Website visits + Phone calls
- Store visits: Disabled
- Conversion scope: Campaign-specific
Only Primary conversions are selected for the campaign.
Bidding Strategy
- Strategy: Maximize Conversions
- Target CPA: Not set
- Daily budget: set by recommended
Rationale:
- Low conversion volume at launch
- Target CPA would restrict learning
- Maximize Conversions allows algorithmic exploration
Target CPA is introduced only after 20–30 conversions.
Audience Settings
- Mode: Observation
- No targeting restrictions
- Optional observed segments:
- In-market Travel
- Tours & Sightseeing
- Experiences & Events
Keywords remain the primary targeting mechanism.
Keyword Strategy and Match Types
Only Phrase match is used at launch. For quick grasp of the idea we use a shoe selling business as an examples:
Broad Match mens running shoes Strategy: Best for discovery, wider reach, and when using Smart Bidding to find new, relevant traffic. Phrase Match "mens running shoes" Strategy: Offers a good balance between reach and relevance, capturing specific intent while allowing for variations. Exact Match [mens running shoes] Strategy: Ideal for high-intent, high-conversion terms where you need maximum control and precision.
Tip: Broad match is something worth looking into to create more data about what works for your website so that exact match can be added later once performance data exists.
Final URL for ads, where `` is the selling point of your website: https://mysite.com/
Ad Creation and Assets
Headlines (examples)
- Premium Shoes for Every Day
- Comfort You Can Feel
- Built for Style & Performance
- Shop Quality Shoes Online
- Designed for All-Day Wear
- Find Your Perfect Fit
Descriptions
- Discover high-quality shoes designed for comfort, durability, and style.
- Shop the latest shoes with easy ordering and fast delivery.
- Everyday shoes built to move with you — at home, work, or on the go.
- Find the right fit and walk with confidence.
Assets
- Call asset with 30-second minimum duration
- Sitelinks (Tours, Custom Tour, Call, About)
- Callouts (Private Tours, Safe Transportation, Custom Itineraries)
- Images (logo + lifestyle)
Google Analytics for Better Tracking
Google Analytics provides behavioral data (page views, engagement, conversions) that complements Google Ads by showing what users actually do after clicking an ad. When linked correctly, Google Ads can import Analytics conversions, use on-site behavior to improve bidding, and give you a clearer picture of which keywords and ads lead to real outcomes (bookings, form submissions, calls). For LLMs and automated bidding systems, this data closes the feedback loop between intent (search/ad click) and outcome (conversion), allowing Google Ads to optimize delivery toward users most likely to complete valuable actions.
Basic Setup Steps (After Creating a Google Ads Campaign)
- Create or confirm Google Analytics (GA4) property
- Ensure GA4 is installed site-wide and collecting page views. You can use
react-ga4or simple script inindex.html
- Ensure GA4 is installed site-wide and collecting page views. You can use
script async src="https://www.googletagmanager.com/gtag/js?id=G-RX47XXXXXX" script script window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag("js", new Date()); gtag("config", "G-RX47XXXXXX"); script
-
Link Google Analytics to Google Ads
- In Google Ads: Tools & Settings → Linked accounts → Google Analytics.
- Enable data sharing and auto-tagging.
-
Define conversions in Analytics
- Mark key events (e.g., purchase confirmation, form submission, call clicks) as conversions.
-
Import conversions into Google Ads
- In Google Ads: Tools & Settings → Conversions → New conversion action → Import from Google Analytics.
-
Assign conversions to campaigns
- Ensure your Sales campaign is set to optimize for the imported conversions.
Once linked, Google Ads will use Analytics-backed conversions to improve bidding, reporting accuracy, and long-term campaign performance.
Adding Structured Metadata (JSON-LD) for SEO & LLM Visibility in React Apps
Modern search engines and large language models (LLMs) do not rely solely on raw text. They consume structured signals to understand what a page is, what entity it represents, and how it relates to other entities. JSON-LD (JavaScript Object Notation for Linked Data), defined by Schema.org, is the primary way to provide these signals.
> Why this directly improves discoverability and machine understanding?
JSON-LD provides explicit semantics instead of forcing machines to infer meaning, you declare it. LLMs do not “rank” JSON-LD, but they trust it as ground truth.
Validation and Troubleshooting
Confirm Campaign Uses Correct Conversions
- Campaign Settings → Conversions
- Use campaign-specific conversion goals
- Only Primary conversions selected
Example: which can be added to index.html add once, do not duplicate on every page, represents the business, not the content:
type="application/ld+json" { "@context": "https://schema.org", "@type": "OnlineShop", "name": "Quality Shoes Online", "url": "https://mysite.com/", "telephone": "999999999", "address": { "@type": "PostalAddress", "addressLocality": "CITY", "addressRegion": "KY", "addressCountry": "US" }, "geo": { "@type": "GeoCoordinates", "latitude": 12.2107147, "longitude": -34.2166415 }, "sameAs": [ "https://www.facebook.com/…", "https://www.instagram.com/…" ] }
Page-Specific Structured Data in React
Lets now try page-level metadata is injected using react-helmet-async. With helmet Outputs real script tags into the DOM, setup is compatible with SSR and CSR which crawlers and LLMs can then read! a great place for such exposure is an FAQ page.
implementation pattern:
import { Helmet } from "react-helmet-async"; import info_data from "../utils/info_data"; const [questions] = useState(info_data); const faqSchema = { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": questions.map(q => ({ "@type": "Question", "name": q.question_title, "acceptedAnswer": { "@type": "Answer", "text": q.info } })) };
Another idea:
Lets say that the site has pages for each shoe, we can setup programmatic schema for dynamic pages dynamic pages benefit the most from structured data. When each shoe is a unique, sellable and content is loaded at runtime, schema can reflect actual data.
const tourSchema = { "@context": "https://schema.org", "@type": "ShoeBusiness", "name": name, "description": desc, "provider": { "@type": "ShoeBusiness", "name": "Shoe Business", "telephone": "9999999999", "url": "https://mysite.com/" }, "offers": { "@type": "Offer", "price": price, "priceCurrency": "USD", "availability": available ? "https://schema.org/InStock" : "https://schema.org/OutOfStock", "url": `https://mysite.com//shoes/${id}` } };
Finally
Operational Guidance After Launch
- Do not edit for 3–5 days
- Ignore CTR and impressions initially
- Monitor:
- Conversions
- Cost / Conversion
- Add negative keywords gradually
- Introduce Exact match and Target CPA later
Brief Conclusion
- Sales campaigns succeed or fail on conversion discipline
- Manual conversion tracking is mandatory for SPAs
- Authentication does not block Google Ads validation
- Fewer, higher-quality signals outperform noisy defaults
- Search campaigns with strict intent control scale predictably
So with this initial setup we can now track conversions we made sure our content is machine-friendly, not just human-readable which is key in the modern ecosystem where AI tools increasingly drive discovery and recommendations.
