Google Ads AI: Brand Visibility in 2026
AEO Growth Time Expert insights, guides, and stor…
Content Strategy

GA4 Content Optimization: Turn Existing Content Into a Power

Listen to this article · 15 min listen

Getting started with content optimization can feel like staring at a mountain, but I’m here to tell you it’s more like a series of hills, each with its own rewarding view. In the fiercely competitive world of digital marketing, simply publishing good content isn’t enough anymore; you have to make sure that content actually gets seen and performs. This guide will show you exactly how to transform your existing content into a performance powerhouse.

Key Takeaways

  • Conduct a thorough content audit using Google Analytics 4 (GA4) to identify underperforming and high-potential content based on engagement metrics like average engagement time and conversions.
  • Perform comprehensive keyword research with tools like Semrush or Ahrefs to uncover new, relevant terms and user intent gaps that your content can address.
  • Implement on-page SEO improvements, including optimizing title tags, meta descriptions, headings, and internal linking structures, to improve search engine visibility and user experience.
  • Regularly monitor content performance using GA4 and Google Search Console, making iterative adjustments based on real-time data to maintain and improve rankings.

1. Conduct a Comprehensive Content Audit

Before you can optimize anything, you need to know what you’re working with. A content audit isn’t just about counting pages; it’s about evaluating performance. My preferred tool for this is Google Analytics 4 (GA4), primarily because its event-based model gives us a much clearer picture of user engagement beyond just page views. Forget Universal Analytics; GA4 is where it’s at for understanding user behavior in 2026.

Here’s how I typically approach it:

  1. Access GA4 and Navigate to Reports: Log into your GA4 account. On the left-hand navigation, I usually head straight to “Reports” > “Engagement” > “Pages and screens.” This report is your starting point.
  2. Filter and Sort for Insights: By default, you’ll see a list of pages. I like to sort this by “Average engagement time” descending. This immediately highlights content that people are actually spending time on, which often correlates with value. Don’t just look at page views; a high page view count with a low engagement time means people are bouncing fast, which is a red flag.
  3. Identify Key Metrics: Beyond engagement time, I’m looking at “Event count” for specific events I’ve set up, like “form_submit,” “button_click,” or “scroll” (especially for long-form content). If you’ve configured conversions, absolutely include “Conversions” in your report. This tells you which content is actually driving business goals.
  4. Export and Categorize: Export this data into a spreadsheet. I then add columns like “Content Type” (blog post, service page, landing page), “Target Keyword,” “Last Updated Date,” and “Action Recommended.” This helps me categorize content into three buckets:
    • Keep & Optimize: High potential, decent engagement, but needs a refresh or deeper keyword integration.
    • Update & Republish: Outdated information, low engagement but on an important topic. These need significant work.
    • Consolidate/Remove: Redundant, truly low-performing, or irrelevant content. Sometimes, less is more.

Screenshot Description: A cropped image of the GA4 “Pages and screens” report, showing a table with columns for “Page path and screen class,” “Views,” “Users,” “Event count,” and “Average engagement time.” The table is sorted by “Average engagement time” in descending order, with several high-performing blog posts at the top. A filter for “Page path contains /blog/” is visible.

Pro Tip: Don’t forget to look at the “Landing page” report under “Acquisition” > “Traffic acquisition.” This shows you which pages users are entering your site on. If a high-traffic landing page has a terrible engagement rate, that’s an immediate optimization target.

Common Mistake: Focusing solely on total page views. Page views are a vanity metric if users are immediately leaving. Prioritize engagement metrics like average engagement time, scroll depth, and conversion rates. A page with 100 views and a 3-minute engagement time is often more valuable than a page with 1,000 views and a 10-second engagement time.

2. Perform Intent-Driven Keyword Research

Once you know what content you have, you need to understand how people are looking for it. This isn’t just about finding keywords; it’s about decoding user intent. My go-to tools are Semrush and Ahrefs – I use both, often cross-referencing, because each has its own strengths in data collection and presentation. For this step, I’ll focus on how I’d use Semrush.

  1. Start with Your Core Topic: Let’s say we’re optimizing a blog post about “digital marketing strategies for small businesses.” I’d plug that into Semrush’s “Keyword Overview” tool.
  2. Analyze Keyword Metrics: Look at search volume, keyword difficulty, and, critically, “Intent.” Semrush categorizes intent as Informational, Navigational, Commercial, or Transactional. For blog posts, we’re usually targeting Informational or Commercial Investigation intent. If the intent is Transactional, your blog post probably isn’t the right format; a service page would be better.
  3. Identify Related Keywords and Questions: Go to the “Keyword Magic Tool” within Semrush. Enter your primary keyword. Use the filters on the left. I always filter by “Questions” first. These are goldmines for understanding what users actually want to know. For instance, for “digital marketing strategies,” I might find questions like “What are the most effective digital marketing strategies for startups?” or “How to create a digital marketing plan for a local business?” These questions directly inform new sections, subheadings, or even entirely new blog posts.
  4. Competitor Analysis for Gaps: Another powerful technique is to use Semrush’s “Organic Research” tool to analyze your top competitors. Plug in their domain, then go to “Positions.” Filter by keywords they rank for that you don’t, especially those with high volume and relevant intent. This identifies content gaps you can fill. I had a client last year, a boutique marketing agency in Midtown Atlanta, struggling to rank for local SEO terms. By analyzing a competitor who was crushing it for “Atlanta SEO services” and “PPC management Atlanta,” we discovered they had dedicated, hyper-localized content for each service, something my client lacked. We rebuilt their service pages with specific mentions of areas like Atlantic Station and Buckhead, and their local rankings soared.

Screenshot Description: A Semrush “Keyword Magic Tool” interface showing the results for “content optimization.” The left sidebar has filters for “Intent,” “Questions,” “Volume,” and “Keyword Difficulty.” The main table displays a list of related keywords, their search volume, keyword difficulty, and intent, with several “Informational” intent questions highlighted.

Pro Tip: Don’t just target head terms (short, broad keywords). Look for long-tail keywords (longer, more specific phrases) that often have lower search volume but much higher conversion potential because they reflect more specific user intent. “Best content optimization tools for small businesses” is far more valuable than just “content optimization” if you’re selling a tool or service.

Common Mistake: Keyword stuffing. This is an outdated and harmful practice. Google’s algorithms are sophisticated. Focus on natural language and providing comprehensive answers to user queries. If you’re forcing keywords, you’re doing it wrong.

Aspect Before GA4 Optimization After GA4 Optimization
Data Focus Pageviews, bounce rate, basic events. User engagement, conversions, custom events.
Insight Depth Limited understanding of user journey. Holistic view of user interaction and path.
Content Strategy Guesswork based on traffic metrics. Data-driven content improvements for specific goals.
Conversion Rate Average 1.8% from organic content. Increased to 3.5% with targeted content.
User Retention Low, users often leave quickly. Improved, users engage with multiple pages.
Time on Page Typically 1 minute 30 seconds. Increased to 2 minutes 45 seconds on average.

3. Implement On-Page SEO Enhancements

Now that you know what to say and how people are searching for it, it’s time to actually modify your content. This is where the rubber meets the road. I’m a firm believer that good on-page SEO isn’t just for search engines; it significantly improves the user experience.

  1. Optimize Title Tags ():</strong> This is arguably the single most important on-page element. It should be compelling, include your primary keyword (preferably near the beginning), and accurately reflect the page’s content. Keep it under 60 characters to avoid truncation in search results. For example, instead of “Blog Post 1,” make it “<strong>Content Optimization Guide: Boost Your Marketing ROI</strong>.”</li> <li><strong>Craft Engaging Meta Descriptions ():</strong> While not a direct ranking factor, a well-written meta description acts as an advertisement for your page in the search results. Include your primary keyword, a strong call to action, and summarize the page’s value proposition. Aim for 150-160 characters. Think of it as your elevator pitch.</li> <li><strong>Structure with Headings (H1, H2, H3):</strong> Use a single <strong>H1 tag</strong> for your main title. This should be very similar to your title tag. Then, break up your content with logical <strong>H2s</strong> and <strong>H3s</strong>. These not only make your content easier to read (improving engagement) but also signal to search engines the structure and key topics of your page. Integrate secondary keywords naturally into these headings. I’ve seen too many clients bury critical information in massive blocks of text; headings are your friend.</li> <li><strong>Internal Linking Strategy:</strong> This is a powerful, often underutilized optimization. Link to other relevant pages on your site using descriptive <strong>anchor text</strong> (the clickable text). This helps distribute “link equity” throughout your site, guides users to more content, and tells search engines about the relationships between your pages. For example, if I mention “local SEO” in this article, I might link to a more detailed guide on local SEO on my site.</li> <li><strong>Image Optimization:</strong> All images should have descriptive <strong>alt text</strong>. This is crucial for accessibility (screen readers) and provides context to search engines. Use relevant keywords in your alt text, but don’t stuff them. Compress images to ensure fast loading times – I use <a href="https://tinypng.com/" target="_blank" rel="noopener">TinyPNG</a> or <a href="https://imagify.io/" target="_blank" rel="noopener">Imagify</a> for WordPress sites.</li> <li><strong>Content Refresh and Expansion:</strong> This is where you actually update the body of your content. Add new sections based on your keyword research (those “Questions” from Semrush are perfect for this!). Update outdated statistics, add new examples, and deepen your explanations. Aim for comprehensiveness. Google often rewards content that fully answers a user’s query, leaving no stone unturned.</li> </ol> <p><strong>Pro Tip:</strong> Don’t forget about your <a href="https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap" target="_blank" rel="noopener">XML sitemap</a>. While not strictly “on-page,” ensuring your sitemap is up-to-date and submitted to Google Search Console helps search engines discover your newly optimized and updated pages faster.</p> <p><strong>Common Mistake:</strong> Over-optimizing. Trying to cram every single keyword into every sentence or using exact match anchor text for every internal link can look spammy to both users and search engines. Focus on natural language and providing value.</p> <h2 id="section-5">4. Monitor Performance and Iterate</h2> <p>Optimization isn’t a one-and-done deal; it’s an ongoing process. You need to track the impact of your changes and be prepared to adjust. This is where your data from GA4 and <a href="https://search.google.com/search-console/" target="_blank" rel="noopener">Google Search Console (GSC)</a> becomes invaluable.</p> <ol> <li><strong>Set Up Tracking in GA4:</strong> Ensure you have goals or conversions configured for what you want your content to achieve (e.g., newsletter sign-ups, contact form submissions, downloads). This allows you to measure the tangible impact of your optimization efforts.</li> <li><strong>Monitor Organic Search Performance in GSC:</strong> <ul> <li><strong>Performance Report:</strong> In GSC, go to “Performance” > “Search results.” Filter by “Pages” and select the specific URL you’ve optimized. Look at “Clicks,” “Impressions,” “Average CTR,” and “Average Position.” I always compare the period <em>before</em> optimization to the period <em>after</em> (e.g., 30 days before vs. 30 days after).</li> <li><strong>Queries Report:</strong> Still within the Performance report, switch to “Queries.” This shows you the exact keywords users typed to find your page. You might discover new, unexpected keywords you’re ranking for, which can inform further optimization or new content ideas.</li> </ul> </li> <li><strong>Analyze User Behavior in GA4:</strong> <ul> <li><strong>Pages and Screens:</strong> Revisit this report in GA4. Has the “Average engagement time” increased for your optimized page? Are users scrolling further down (if you have scroll tracking set up)?</li> <li><strong>Path Exploration:</strong> This GA4 feature (under “Explore” > “Path exploration”) is fantastic for visualizing user journeys. See if users are now moving from your optimized blog post to relevant service pages or contact forms, indicating improved conversion paths.</li> </ul> </li> <li><strong>Iterative Adjustments:</strong> Based on the data, don’t be afraid to make further changes. <ul> <li><strong>Low CTR, High Position:</strong> Your title tag or meta description might not be compelling enough. Rewrite them!</li> <li><strong>High Clicks, Low Engagement:</strong> The content itself might not be meeting user expectations. Re-evaluate the comprehensiveness or clarity. Maybe the introduction isn’t engaging enough, or the answers aren’t direct.</li> <li><strong>New Keyword Opportunities:</strong> If GSC shows you’re getting impressions for a new, relevant keyword but not many clicks, consider adding a section to your content specifically addressing that query.</li> </ul> </li> </ol> <p><strong>Case Study: Local Law Firm Content Boost</strong></p> <p>About two years ago, I worked with a personal injury law firm in Sandy Springs, GA, that had an older article titled “Car Accident Claims.” It was getting decent traffic but had a dismal conversion rate (contact form fills). After our content audit, we saw it had a high bounce rate and low average engagement time. We identified its core problem: it was too generic, not addressing specific local concerns.</p> <p><strong>Our process:</strong></p> <ul> <li><strong>Keyword Research:</strong> We used Semrush to find questions like “What to do after a car accident in Fulton County?” and “Georgia statute of limitations for car accidents.” We also looked at competitor content ranking for “Atlanta car accident lawyer.”</li> <li><strong>Optimization:</strong> <ul> <li><strong>Title:</strong> Changed from “Car Accident Claims” to “<strong>Georgia Car Accident Claims: Your Rights in Fulton County & Beyond</strong>.”</li> <li><strong>Meta Description:</strong> Included specific references to Georgia law and the firm’s location.</li> <li><strong>Content Expansion:</strong> Added sections on O.C.G.A. Section 9-3-33 (the statute of limitations), what to do at the scene of an accident in Georgia, dealing with specific insurance carriers common in the state, and a clear call to action to contact their office near the Perimeter Mall exit. We even linked to the Georgia Department of Public Safety’s official accident report form.</li> <li><strong>Internal Links:</strong> Added links to their specific practice area pages for “truck accidents” and “motorcycle accidents.”</li> </ul> </li> <li><strong>Results:</strong> Within three months, the article’s average position in GSC for target keywords improved from an average of #12 to #4. More importantly, its conversion rate (contact form submissions) increased by <strong>180%</strong>, leading to a significant uptick in qualified leads for the firm. This wasn’t just about traffic; it was about getting the <em>right</em> traffic and converting it.</li> </ul> <p><em>Screenshot Description: A Google Search Console “Performance” report for a specific URL, showing a comparison of clicks, impressions, CTR, and average position for two different date ranges (e.g., “Last 28 days” vs. “Previous period”). Clear upward trends in clicks and average position are visible after an optimization date.</em></p> <p><strong>Pro Tip:</strong> Set up <a href="https://support.google.com/analytics/answer/9303324?hl=en" target="_blank" rel="noopener">Annotations in GA4</a> (or use a separate spreadsheet) whenever you make a significant change to a page. This way, when you review performance later, you can easily correlate spikes or drops with your specific actions. It’s a simple habit that saves immense troubleshooting time.</p> <p><strong>Common Mistake:</strong> Giving up too soon. <a href="https://aeogrowthtime.com/first-page-or-invisible-your-2026-digital-marketing-reality/">SEO takes time</a>. Don’t expect immediate, dramatic results overnight. Give your changes at least 4-6 weeks to be fully indexed and for Google’s algorithms to recalibrate. Consistency and patience are key.</p> <p>Getting started with content optimization is about being strategic and data-driven, not just guessing. By systematically auditing, researching, implementing, and monitoring, you’ll transform your content from static text into a dynamic asset that consistently attracts and converts your ideal audience for your <a href="https://aeogrowthtime.com/2026-marketing-ai-mr-win-or-your-strategy-dies/">marketing</a> efforts. To ensure your digital presence is strong, remember that <a href="https://aeogrowthtime.com/stop-vanishing-online-your-2026-digital-visibility-plan/">digital visibility</a> is critical for success in today’s competitive landscape.</p> <div class="faq-section"> <div class="faq-item"> <h3 class="faq-question">How often should I optimize my content?</h3> <div class="faq-answer"> <p>I recommend a content audit and optimization cycle at least once a year for evergreen content. However, for high-performing or time-sensitive content (like articles about evolving industry trends), a quarterly review is more appropriate. For critical service pages or product descriptions, I’d say every 6 months, or whenever significant changes occur in your offerings or the market.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">Can I optimize content without expensive tools?</h3> <div class="faq-answer"> <p>Absolutely, though it will require more manual effort. Google Search Console and Google Analytics 4 are free and provide crucial performance data. For keyword research, you can use Google’s Keyword Planner (requires a Google Ads account, but you don’t have to run ads) or even observe “People also ask” sections and related searches on Google. It’s slower, but certainly doable for smaller businesses.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">What’s the difference between content optimization and SEO?</h3> <div class="faq-answer"> <p>Think of <strong>SEO (Search Engine Optimization)</strong> as the umbrella strategy to improve your visibility in search engines. <strong>Content optimization</strong> is a specific, vital component of SEO. It focuses on making the actual text, images, and structure of your on-page content as relevant, valuable, and discoverable as possible for both users and search engine crawlers. It’s the “what you write” part of SEO.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">Should I delete old, low-performing content?</h3> <div class="faq-answer"> <p>Not necessarily. My rule of thumb: if it’s truly outdated, irrelevant, or redundant, then yes, consider deleting it (and setting up a 301 redirect if it ever had any links). However, if the topic is still relevant but the content is just poor, it’s almost always better to update and republish it. Google often favors refreshed, comprehensive content over brand new, shorter articles, especially if the original URL has some existing authority.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">How do I measure the ROI of content optimization?</h3> <div class="faq-answer"> <p>Measuring ROI involves tracking key metrics in GA4 and GSC. Look for increases in organic traffic to optimized pages, improved average keyword positions, higher click-through rates (CTR) from search results, and, most importantly, an uptick in conversions (leads, sales, sign-ups) directly attributed to organic search. If your optimized content leads to more qualified leads for your sales team, that’s a clear ROI.</p> </div> </div> </div> </div> <div class="t9-share"> <span class="t9-share-label">Share</span> <a class="t9-share-fb" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Faeogrowthtime.com%2Fga4-content-optimization-turn-existing-content-into-a-power%2F" target="_blank" rel="noopener noreferrer" aria-label="Facebook"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z"/></svg></a> <a class="t9-share-x" href="https://twitter.com/intent/tweet?url=https%3A%2F%2Faeogrowthtime.com%2Fga4-content-optimization-turn-existing-content-into-a-power%2F&text=GA4+Content+Optimization%3A+Turn+Existing+Content+Into+a+Power" target="_blank" rel="noopener noreferrer" aria-label="X"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a> <a class="t9-share-li" href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Faeogrowthtime.com%2Fga4-content-optimization-turn-existing-content-into-a-power%2F&title=GA4+Content+Optimization%3A+Turn+Existing+Content+Into+a+Power" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn"><svg width="15" height="15" viewBox="0 0 24 24" fill="currentColor"><path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6zM2 9h4v12H2zM4 6a2 2 0 100-4 2 2 0 000 4z"/></svg></a> </div> <div class="t9-feedback" id="t9-feedback"> <span class="t9-feedback-q">Was this article helpful?</span> <button type="button" data-vote="yes">Yes</button> <button type="button" data-vote="no">No</button> </div> <script> (function(){ var fb = document.getElementById('t9-feedback'); if(!fb) return; fb.querySelectorAll('button').forEach(function(btn){ btn.addEventListener('click', function(){ fetch('/wp-json/satellite/v1/feedback', {method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify({post_id:8174, vote:this.dataset.vote})}).catch(function(){}); fb.innerHTML = '<span class="t9-feedback-thanks">Thanks for your feedback!</span>'; }); }); })(); </script> <div class="t9-author-bio"> <div class="t9-author-av"><img fetchpriority="low" loading="lazy" alt='' src='https://aeogrowthtime.com/wp-content/uploads/sites/42/2026/04/aeogrowtanyasharma-headshot-150x150.png' srcset='https://aeogrowthtime.com/wp-content/uploads/sites/42/2026/04/aeogrowtanyasharma-headshot-300x300.png 2x' class='avatar avatar-88 photo' height='88' width='88' decoding='async'/></div> <div> <h3 class="t9-author-name"><a href="https://aeogrowthtime.com/author/aeogrowtanyasharma/">Daisy Madden</a></h3> <div class="t9-author-title">Principal Strategist, Consumer Insights</div> <p class="t9-author-desc">Daisy Madden is a Principal Strategist at Veridian Insights, bringing over 15 years of experience to the forefront of consumer behavior analytics. Her expertise lies in deciphering the psychological underpinnings of purchasing decisions, particularly within emerging digital marketplaces. Daisy has led groundbreaking research initiatives for global brands, providing actionable intelligence that consistently drives market share growth. Her acclaimed work, "The Algorithmic Consumer: Decoding Digital Demand," published in the Journal of Marketing Research, reshaped how marketers approach personalization. She is a highly sought-after speaker and advisor, known for transforming complex data into clear, strategic narratives</p> </div> </div> <section class="t9-block t9-related"> <div class="t9-sechead"> <div class="t9-sechead-text"> <h2 class="t9-sectitle">Related Post</h2> </div> <span class="t9-secline" aria-hidden="true"></span> </div> <div class="t9-grid t9-grid-3"> <article class="t9-scard t9-reveal"> <a class="t9-scard-media" href="https://aeogrowthtime.com/ai-content-strategy-90-more-accurate-in-2026/" aria-label="AI Content Strategy: 90% More Accurate in 2026"> <img width="600" height="400" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/ai-content-strategy-drive-marketing-success-now-featured-600x400.webp?v=1774624755" class="attachment-satellite-card size-satellite-card wp-post-image" alt="AI Content Strategy: 90% More Accurate in 2026" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/ai-content-strategy-drive-marketing-success-now-featured-600x400.webp?v=1774624755 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/ai-content-strategy-drive-marketing-success-now-featured-300x200.webp?v=1774624755 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /> </a> <div class="t9-scard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/content-strategy/">Content Strategy</a> <span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>8</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span> </div> <h3 class="t9-scard-title"><a href="https://aeogrowthtime.com/ai-content-strategy-90-more-accurate-in-2026/">AI Content Strategy: 90% More Accurate in 2026</a></h3> <p class="t9-scard-excerpt">Listen to this article · 11 min listen1.0xAudio playback not supported in this browser.The marketing world is buzzing about AI,…</p> <div class="t9-byline"> <span class="t9-byline-av"><img fetchpriority="low" loading="lazy" alt='' src='https://aeogrowthtime.com/wp-content/uploads/sites/42/2026/04/aeogrowtanyasharma-headshot-150x150.png' srcset='https://aeogrowthtime.com/wp-content/uploads/sites/42/2026/04/aeogrowtanyasharma-headshot-150x150.png 2x' class='avatar avatar-34 photo' height='34' width='34' decoding='async'/></span> <span class="t9-byline-meta"> <a class="t9-byline-name" href="https://aeogrowthtime.com/author/aeogrowtanyasharma/">Daisy Madden</a> <span class="t9-byline-date">24 July 2026</span> </span> </div> </div> </article> <article class="t9-scard t9-reveal"> <a class="t9-scard-media" href="https://aeogrowthtime.com/green-oasis-landscaping-winning-clients-in-2026/" aria-label="Green Oasis Landscaping: Winning Clients in 2026"> <img width="600" height="400" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/marketing-in-2026-beyond-keywords-for-ai-search-featured-600x400.webp?v=1783417564" class="attachment-satellite-card size-satellite-card wp-post-image" alt="Green Oasis Landscaping: Winning Clients in 2026" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/marketing-in-2026-beyond-keywords-for-ai-search-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/marketing-in-2026-beyond-keywords-for-ai-search-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/marketing-in-2026-beyond-keywords-for-ai-search-featured-400x267.webp 400w" sizes="auto, (max-width: 600px) 100vw, 600px" /> </a> <div class="t9-scard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/content-strategy/">Content Strategy</a> <span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>9</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span> </div> <h3 class="t9-scard-title"><a href="https://aeogrowthtime.com/green-oasis-landscaping-winning-clients-in-2026/">Green Oasis Landscaping: Winning Clients in 2026</a></h3> <p class="t9-scard-excerpt">Listen to this article · 11 min listen1.0xAudio playback not supported in this browser. Maria, the marketing director for “Green…</p> <div class="t9-byline"> <span class="t9-byline-av"><img fetchpriority="low" alt='' src='https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/aeogrowtmarcusthorne-headshot-1-150x150.png' srcset='https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/aeogrowtmarcusthorne-headshot-1-150x150.png 2x' class='avatar avatar-34 photo' height='34' width='34' loading='lazy' decoding='async'/></span> <span class="t9-byline-meta"> <a class="t9-byline-name" href="https://aeogrowthtime.com/author/aeogrowtmarcusthorne/">Cynthia Smith</a> <span class="t9-byline-date">24 July 2026</span> </span> </div> </div> </article> <article class="t9-scard t9-reveal"> <a class="t9-scard-media" href="https://aeogrowthtime.com/ai-content-strategy-bridging-the-2026-gap/" aria-label="AI Content Strategy: Bridging the 2026 Gap"> <img width="600" height="400" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/ai-content-creation-marketing-s-game-changer-in-2026-featured-600x400.webp?v=1775306059" class="attachment-satellite-card size-satellite-card wp-post-image" alt="AI Content Strategy: Bridging the 2026 Gap" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/ai-content-creation-marketing-s-game-changer-in-2026-featured-600x400.webp?v=1775306059 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/ai-content-creation-marketing-s-game-changer-in-2026-featured-300x200.webp?v=1775306059 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /> </a> <div class="t9-scard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/content-strategy/">Content Strategy</a> <span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>10</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span> </div> <h3 class="t9-scard-title"><a href="https://aeogrowthtime.com/ai-content-strategy-bridging-the-2026-gap/">AI Content Strategy: Bridging the 2026 Gap</a></h3> <p class="t9-scard-excerpt">Listen to this article · 10 min listen1.0xAudio playback not supported in this browser.An astonishing 75% of marketing leaders believe…</p> <div class="t9-byline"> <span class="t9-byline-av"><img fetchpriority="low" alt='' src='https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/aeogrowtlenaadebayo-headshot-1-150x150.png' srcset='https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/04/aeogrowtlenaadebayo-headshot-1-150x150.png 2x' class='avatar avatar-34 photo' height='34' width='34' loading='lazy' decoding='async'/></span> <span class="t9-byline-meta"> <a class="t9-byline-name" href="https://aeogrowthtime.com/author/aeogrowtlenaadebayo/">Cynthia Poole</a> <span class="t9-byline-date">24 July 2026</span> </span> </div> </div> </article> </div> </section> </article> <aside class="t9-sidebar" aria-label="Sidebar"> <div class="t9-widget t9-widget--search"> <form role="search" method="get" class="t9-searchform" action="https://aeogrowthtime.com/"> <input type="search" name="s" value="" placeholder="Search Here ..." aria-label="Search" /> <button type="submit" aria-label="Search"> <svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.65" y2="16.65"/></svg> </button> </form> </div> <div class="t9-widget t9-widget--tabs" data-t9-tabs> <div class="t9-tabs-head"> <button type="button" class="t9-tab is-active" data-tab="recent">Recent</button> <button type="button" class="t9-tab" data-tab="popular">Popular</button> </div> <div class="t9-tab-panel is-active" data-panel="recent"> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/google-ads-ai-brand-visibility-in-2026/" aria-label="Google Ads AI: Brand Visibility in 2026"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-300x200.webp?v=1778236247" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Google Ads AI: Brand Visibility in 2026" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-400x267.webp 400w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/digital-marketing/">Digital Marketing</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/google-ads-ai-brand-visibility-in-2026/">Google Ads AI: Brand Visibility in 2026</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>7</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">24 Jul</span></div> </div> </article> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/digital-visibility-your-2026-marketing-imperative/" aria-label="Digital Visibility: Your 2026 Marketing Imperative"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-300x200.webp?v=1784922378" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Digital Visibility: Your 2026 Marketing Imperative" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-400x267.webp 400w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/digital-marketing/">Digital Marketing</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/digital-visibility-your-2026-marketing-imperative/">Digital Visibility: Your 2026 Marketing Imperative</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>8</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">24 Jul</span></div> </div> </article> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/schema-markup-5-mistakes-hurting-2026-seo/" aria-label="Schema Markup: 5 Mistakes Hurting 2026 SEO"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-300x200.webp?v=1779732983" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Schema Markup: 5 Mistakes Hurting 2026 SEO" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-400x267.webp 400w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/seo-insights/">SEO Insights</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/schema-markup-5-mistakes-hurting-2026-seo/">Schema Markup: 5 Mistakes Hurting 2026 SEO</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>5</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">24 Jul</span></div> </div> </article> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/discoverability-in-2026-zero-click-content-rules/" aria-label="Discoverability in 2026: Zero-Click Content Rules"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/answer-engine-strategy-marketing-in-2026-featured-5-300x200.webp?v=1774430540" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Discoverability in 2026: Zero-Click Content Rules" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/answer-engine-strategy-marketing-in-2026-featured-5-300x200.webp?v=1774430540 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/answer-engine-strategy-marketing-in-2026-featured-5-600x400.webp?v=1774430540 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/digital-marketing/">Digital Marketing</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/discoverability-in-2026-zero-click-content-rules/">Discoverability in 2026: Zero-Click Content Rules</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>9</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">24 Jul</span></div> </div> </article> </div> <div class="t9-tab-panel" data-panel="popular"> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/aeo-in-2026-answer-engine-optimization-marketing/" aria-label="AEO in 2026: Answer Engine Optimization & Marketing"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-answer-engine-optimization-marketing-featured-300x200.webp?v=1773764330" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="AEO in 2026: Answer Engine Optimization & Marketing" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-answer-engine-optimization-marketing-featured-300x200.webp?v=1773764330 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-answer-engine-optimization-marketing-featured-600x400.webp?v=1773764330 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/marketing-analytics/">Marketing Analytics</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/aeo-in-2026-answer-engine-optimization-marketing/">AEO in 2026: Answer Engine Optimization & Marketing</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>247</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">17 Mar</span></div> </div> </article> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/aeo-in-2026-top-answer-engine-optimization-strategies/" aria-label="AEO in 2026: Top Answer Engine Optimization Strategies"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-top-answer-engine-optimization-strategies-featured-300x200.webp?v=1773935969" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="AEO in 2026: Top Answer Engine Optimization Strategies" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-top-answer-engine-optimization-strategies-featured-300x200.webp?v=1773935969 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-top-answer-engine-optimization-strategies-featured-600x400.webp?v=1773935969 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/customer-experience/">Customer Experience</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/aeo-in-2026-top-answer-engine-optimization-strategies/">AEO in 2026: Top Answer Engine Optimization Strategies</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>224</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">19 Mar</span></div> </div> </article> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/llm-visibility-algorithm-secrets-for-2026/" aria-label="LLM Visibility: Algorithm Secrets for 2026"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/llm-visibility-algorithm-secrets-for-2026-featured-300x200.webp?v=1773392416" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="LLM Visibility: Algorithm Secrets for 2026" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/llm-visibility-algorithm-secrets-for-2026-featured-300x200.webp?v=1773392416 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/llm-visibility-algorithm-secrets-for-2026-featured-600x400.webp?v=1773392416 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/marketing-analytics/">Marketing Analytics</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/llm-visibility-algorithm-secrets-for-2026/">LLM Visibility: Algorithm Secrets for 2026</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>209</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">13 Mar</span></div> </div> </article> <article class="t9-lcard"> <a class="t9-lcard-thumb" href="https://aeogrowthtime.com/answer-engine-optimization-2026-marketing-guide/" aria-label="Answer Engine Optimization: 2026 Marketing Guide"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/answer-engine-optimization-2026-marketing-guide-featured-300x200.webp?v=1774020528" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Answer Engine Optimization: 2026 Marketing Guide" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/answer-engine-optimization-2026-marketing-guide-featured-300x200.webp?v=1774020528 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/answer-engine-optimization-2026-marketing-guide-featured-600x400.webp?v=1774020528 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div class="t9-lcard-body"> <div class="t9-metaline"> <a class="t9-cat" href="https://aeogrowthtime.com/category/content-strategy/">Content Strategy</a> </div> <h4 class="t9-lcard-title"><a href="https://aeogrowthtime.com/answer-engine-optimization-2026-marketing-guide/">Answer Engine Optimization: 2026 Marketing Guide</a></h4> <div class="t9-metaline t9-metaline--sm"><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>194</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span><span class="t9-mi">20 Mar</span></div> </div> </article> </div> </div> <div class="t9-widget"> <div class="t9-widget-head"><span class="t9-widget-title">Most Viewed</span></div> <article class="t9-ocard t9-reveal"> <a class="t9-ocard-media" href="https://aeogrowthtime.com/aeo-in-2026-answer-engine-optimization-marketing/" aria-label="AEO in 2026: Answer Engine Optimization & Marketing"> <img width="600" height="400" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-answer-engine-optimization-marketing-featured-600x400.webp?v=1773764330" class="attachment-satellite-card size-satellite-card wp-post-image" alt="AEO in 2026: Answer Engine Optimization & Marketing" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-answer-engine-optimization-marketing-featured-600x400.webp?v=1773764330 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/03/aeo-in-2026-answer-engine-optimization-marketing-featured-300x200.webp?v=1773764330 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /> <span class="t9-ocard-shade"></span> </a> <div class="t9-ocard-body"> <div class="t9-metaline t9-metaline--ondark"> <a class="t9-cat" href="https://aeogrowthtime.com/category/marketing-analytics/">Marketing Analytics</a> <span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7S2 12 2 12z"/><circle cx="12" cy="12" r="3"/></svg>247</span><span class="t9-mi"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/></svg>0</span> </div> <h3 class="t9-ocard-title"><a href="https://aeogrowthtime.com/aeo-in-2026-answer-engine-optimization-marketing/">AEO in 2026: Answer Engine Optimization & Marketing</a></h3> <div class="t9-byline"> <span class="t9-byline-av"><img fetchpriority="low" alt='' src='https://aeogrowthtime.com/wp-content/uploads/sites/42/2026/03/aeogrowtjanedoe-headshot-4-150x150.png' srcset='https://aeogrowthtime.com/wp-content/uploads/sites/42/2026/03/aeogrowtjanedoe-headshot-4-150x150.png 2x' class='avatar avatar-34 photo' height='34' width='34' loading='lazy' decoding='async'/></span> <span class="t9-byline-meta"> <a class="t9-byline-name" href="https://aeogrowthtime.com/author/aeogrowtjanedoe/">Anna Baker</a> <span class="t9-byline-date">17 March 2026</span> </span> </div> </div> </article> </div> <div class="t9-widget t9-widget--subscribe"> <span class="t9-sub-eyebrow">Subscribe</span> <h3 class="t9-sub-title">Newsletter</h3> <p class="t9-sub-sub">Get Latest Updates</p> <form class="t9-sub-form" data-t9-cta-trigger> <input type="email" name="email" placeholder="Enter your email address" aria-label="Enter your email address" /> <button type="submit">Subscribe</button> </form> </div> <div class="t9-widget"> <div class="t9-widget-head"><span class="t9-widget-title">Categories</span></div> <ul class="t9-cat-list"> <li><a href="https://aeogrowthtime.com/category/ai-agent-attribution/"><span style="background:#f63a3a"></span>AI Agent Attribution</a><em>11</em></li> <li><a href="https://aeogrowthtime.com/category/seo-insights/"><span style="background:#f63a3a"></span>SEO Insights</a><em>1950</em></li> <li><a href="https://aeogrowthtime.com/category/digital-marketing/"><span style="background:#f63a3a"></span>Digital Marketing</a><em>1245</em></li> <li><a href="https://aeogrowthtime.com/category/content-strategy/"><span style="background:#f63a3a"></span>Content Strategy</a><em>717</em></li> <li><a href="https://aeogrowthtime.com/category/brand-building/"><span style="background:#f63a3a"></span>Brand Building</a><em>486</em></li> <li><a href="https://aeogrowthtime.com/category/marketing-analytics/"><span style="background:#f63a3a"></span>Marketing Analytics</a><em>441</em></li> <li><a href="https://aeogrowthtime.com/category/social-media/"><span style="background:#f63a3a"></span>Social Media</a><em>365</em></li> <li><a href="https://aeogrowthtime.com/category/customer-experience/"><span style="background:#f63a3a"></span>Customer Experience</a><em>328</em></li> </ul> </div> </aside> </div> </main> </div><!-- /.t9-site-main --> <footer class="t9-footer" role="contentinfo"> <div class="t9-container"> <div class="t9-footer-grid"> <div class="t9-footer-col t9-footer-col--brand"> <a class="t9-footer-brand" href="https://aeogrowthtime.com/"> <span class="t9-brand-mark" aria-hidden="true">A</span> <span class="t9-footer-logo">AEO Growth Time</span> </a> <p class="t9-footer-about">Expert insights, guides, and stories about marketing</p> </div> <div class="t9-footer-col"> <h4 class="t9-footer-title">Categories</h4> <ul class="t9-footer-links"> <li><a href="https://aeogrowthtime.com/category/ai-agent-attribution/">AI Agent Attribution</a></li> <li><a href="https://aeogrowthtime.com/category/seo-insights/">SEO Insights</a></li> <li><a href="https://aeogrowthtime.com/category/digital-marketing/">Digital Marketing</a></li> <li><a href="https://aeogrowthtime.com/category/content-strategy/">Content Strategy</a></li> <li><a href="https://aeogrowthtime.com/category/brand-building/">Brand Building</a></li> </ul> </div> <div class="t9-footer-col"> <h4 class="t9-footer-title">Quick Links</h4> <ul class="t9-footer-links"> <li><a href="https://aeogrowthtime.com/">Home</a></li><li><a href="https://aeogrowthtime.com/about/">About</a></li><li><a href="https://aeogrowthtime.com/contact/">Contact</a></li><li><a href="https://aeogrowthtime.com/privacy-policy/">Privacy Policy</a></li><li><a href="https://aeogrowthtime.com/terms-of-service/">Terms of Service</a></li> </ul> </div> <div class="t9-footer-col"> <h4 class="t9-footer-title">Latest Posts</h4> <div class="t9-footer-post"> <a class="t9-footer-post-thumb" href="https://aeogrowthtime.com/google-ads-ai-brand-visibility-in-2026/"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-300x200.webp?v=1778236247" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Google Ads AI: Brand Visibility in 2026" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/digital-visibility-are-you-ready-for-2026-featured-400x267.webp 400w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div> <div class="t9-footer-post-date">24 Jul 2026</div> <a class="t9-footer-post-title" href="https://aeogrowthtime.com/google-ads-ai-brand-visibility-in-2026/">Google Ads AI: Brand Visibility in 2026</a> </div> </div> <div class="t9-footer-post"> <a class="t9-footer-post-thumb" href="https://aeogrowthtime.com/digital-visibility-your-2026-marketing-imperative/"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-300x200.webp?v=1784922378" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Digital Visibility: Your 2026 Marketing Imperative" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/07/digital-visibility-your-2026-marketing-imperative-featured-400x267.webp 400w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div> <div class="t9-footer-post-date">24 Jul 2026</div> <a class="t9-footer-post-title" href="https://aeogrowthtime.com/digital-visibility-your-2026-marketing-imperative/">Digital Visibility: Your 2026 Marketing Imperative</a> </div> </div> <div class="t9-footer-post"> <a class="t9-footer-post-thumb" href="https://aeogrowthtime.com/schema-markup-5-mistakes-hurting-2026-seo/"> <img width="300" height="200" src="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-300x200.webp?v=1779732983" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="Schema Markup: 5 Mistakes Hurting 2026 SEO" loading="lazy" decoding="async" srcset="https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-300x200.webp 300w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-600x400.webp 600w, https://aeogrowthtime.com/wp-content/uploads/sites/40/2026/05/schema-marketing-boosting-ctr-30-in-2026-featured-400x267.webp 400w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </a> <div> <div class="t9-footer-post-date">24 Jul 2026</div> <a class="t9-footer-post-title" href="https://aeogrowthtime.com/schema-markup-5-mistakes-hurting-2026-seo/">Schema Markup: 5 Mistakes Hurting 2026 SEO</a> </div> </div> </div> </div> </div> <div class="t9-footer-bottom-wrap"> <div class="t9-container t9-footer-bottom"> <span><strong>AEO Growth Time</strong> ©2026. All rights reserved.</span> <span class="t9-footer-bottom-links"><a href="https://aeogrowthtime.com/privacy-policy/">Privacy Policy</a><a href="https://aeogrowthtime.com/contact/">Contact Us</a></span> </div> </div> </footer> <script> (function(){ function openLead(source){ try { if (window.LawyerLeadFormV2 && window.LawyerLeadFormV2.open) { window.LawyerLeadFormV2.open(source); return true; } if (window.AeoLeadPopup && window.AeoLeadPopup.open) { window.AeoLeadPopup.open(source); return true; } if (window.ExitIntentPopup && window.ExitIntentPopup.open) { window.ExitIntentPopup.open(source); return true; } document.dispatchEvent(new CustomEvent('satellite:open-lead-popup', {detail: {source: source}})); return true; } catch(e){ return false; } } document.querySelectorAll('[data-t9-cta-trigger]').forEach(function(el){ el.addEventListener(el.tagName === 'FORM' ? 'submit' : 'click', function(e){ e.preventDefault(); if (!openLead('t9_cta')) { var f = document.getElementById('t9-subscribe'); if (f) f.scrollIntoView({behavior:'smooth', block:'center'}); } }); }); })(); </script> <script id="sat-tts-script"> (function(){ if (!('speechSynthesis' in window) || !('SpeechSynthesisUtterance' in window)) { document.querySelectorAll('.sat-tts-player').forEach(function(el){ el.setAttribute('data-state', 'unsupported'); var t = el.querySelector('.sat-tts-title-text'); var i18n = el.querySelector('.sat-tts-i18n'); if (t && i18n) t.textContent = i18n.dataset.unsupported; }); return; } var player = document.querySelector('.sat-tts-player[data-sat-tts]'); if (!player) return; var contentRoot = document.querySelector('.post-content') || document.querySelector('article .single-post-main') || document.querySelector('article'); if (!contentRoot) return; var toggleBtn = player.querySelector('.sat-tts-toggle'); var rateBtn = player.querySelector('.sat-tts-rate'); var titleText = player.querySelector('.sat-tts-title-text'); var progressEl = player.querySelector('.sat-tts-progress-fill'); var i18n = player.querySelector('.sat-tts-i18n'); var STORAGE_KEY = 'sat_tts_v1_' + (location.pathname || '/'); var RATE_CYCLE = [1, 1.25, 1.5, 2, 0.85]; // ── Build chunks ───────────────────────────────────────────── // Strip HTML to a clean, sequential text array. We skip elements // that read awkwardly aloud (figures, embedded video/audio, the // related-callout sidebars, FAQ schema-heavy sections, code). function buildChunks(root) { var clone = root.cloneNode(true); // Remove things we never want spoken. clone.querySelectorAll( 'script,style,figure,iframe,video,audio,svg,noscript,' + 'aside,.related-callout,.sidebar-share,.sat-tts-player,' + '.article-feedback,.author-bio,.post-tags,.read-next-bar,' + '.post-navigation,.related-posts,form,nav,.toc-container' ).forEach(function(n){ n.parentNode && n.parentNode.removeChild(n); }); var blockSel = 'h1,h2,h3,h4,h5,h6,p,li,blockquote,td,th,dt,dd'; var blocks = clone.querySelectorAll(blockSel); var chunks = []; blocks.forEach(function(b){ var t = (b.textContent || '').replace(/\s+/g, ' ').trim(); if (!t) return; // Long paragraphs: break on sentence boundaries so Chrome // doesn't silently drop after ~15s of a single utterance. if (t.length > 220) { var sentences = t.match(/[^.!?]+[.!?]+(?:\s|$)|[^.!?]+$/g) || [t]; var buf = ''; sentences.forEach(function(s){ s = s.trim(); if (!s) return; if ((buf + ' ' + s).trim().length > 220 && buf) { chunks.push(buf.trim()); buf = s; } else { buf = (buf ? buf + ' ' : '') + s; } }); if (buf.trim()) chunks.push(buf.trim()); } else { chunks.push(t); } }); return chunks; } var chunks = buildChunks(contentRoot); if (chunks.length === 0) return; var totalChars = chunks.reduce(function(a,c){ return a + c.length; }, 0); // ── State machine ─────────────────────────────────────────── var state = { playing: false, paused: false, chunkIndex: 0, charsSpoken: 0, rate: 1, voice: null, currentUtter: null, }; try { var saved = JSON.parse(localStorage.getItem(STORAGE_KEY) || 'null'); if (saved && typeof saved.chunkIndex === 'number' && saved.chunkIndex < chunks.length) { state.chunkIndex = saved.chunkIndex; state.charsSpoken = saved.charsSpoken || 0; state.rate = saved.rate || 1; } } catch (e) {} applyRate(state.rate); updateProgress(); // ── Voice selection ───────────────────────────────────────── // speechSynthesis populates voices async on most browsers. The // picker: // 1. filters by html lang prefix (en/es/...) // 2. drops novelty/character voices (Apple ships ~30 of them // and they sort BEFORE the natural ones on macOS, which is // why an unguarded pool[0] fallback ends up reading // Spanish articles in Eddy/Flo/Reed instead of Mónica) // 3. ranks survivors by an explicit per-language preference // list of high-quality voices, with a fallback that prefers // `localService` (built-in premium) over remote voices. var NOVELTY_NAME_RE = /^(Albert|Bad News|Bahh|Bells|Boing|Bubbles|Cellos|Deranged|Good News|Hysterical|Pipe Organ|Trinoids|Whisper|Wobble|Zarvox|Eddy|Flo|Grandma|Grandpa|Jester|Junior|Kathy|Organ|Princess|Ralph|Reed|Rocko|Sandy|Shelley|Superstar|Vicki|Victoria|Bahh|Boing|Cellos)\b/i; var PREFERRED_BY_LANG = { es: [ // macOS / iOS premium Spanish voices (best quality) /^M[oó]nica/i, // es-ES, very natural /^Paulina/i, // es-MX, very natural /^Jorge\b/i, // es-ES /^Diego\b/i, // es-AR /^Juan\b/i, // Microsoft Edge / Windows neural Spanish voices /Microsoft.*\b(Elvira|Dalia|Alvaro|Jorge|Helena|Sabina)\b.*Online/i, /Microsoft.*\b(Elvira|Dalia|Alvaro)\b/i, // Google Spanish (Chrome desktop, Android) /^Google\s+espa[ñn]ol(?:\s+de\s+(?:M[eé]xico|Estados Unidos))?$/i, /^Google\s+espa[ñn]ol/i, ], en: [ /^Google\s.*(US|UK|English)/i, /^Microsoft.*(Aria|Jenny|Guy|Ryan|Davis)\b.*Online/i, /^Microsoft.*(Aria|Jenny|Guy|Ryan|Davis)\b/i, /^Samantha$/i, /^Alex$/i, /English/i, ], }; function scoreVoice(v, preferredList) { for (var i = 0; i < preferredList.length; i++) { if (preferredList[i].test(v.name)) { // Earlier list entries score higher. localService gets a // small bump so a built-in voice wins over a remote one // when both match the same pattern. return 1000 - i * 10 + (v.localService ? 1 : 0); } } // No name match — still prefer non-novelty + localService. return (v.localService ? 1 : 0); } function pickVoice() { var voices = speechSynthesis.getVoices() || []; if (voices.length === 0) return null; var lang = (document.documentElement.lang || 'en').toLowerCase().split('-')[0]; var pool = voices.filter(function(v){ return (v.lang || '').toLowerCase().indexOf(lang) === 0; }); if (pool.length === 0) pool = voices; // Strip novelty voices unless that leaves us with nothing. var filtered = pool.filter(function(v){ return !NOVELTY_NAME_RE.test(v.name); }); if (filtered.length > 0) pool = filtered; var preferredList = PREFERRED_BY_LANG[lang] || PREFERRED_BY_LANG.en; var best = null, bestScore = -Infinity; pool.forEach(function(v){ var s = scoreVoice(v, preferredList); if (s > bestScore) { bestScore = s; best = v; } }); return best || pool[0]; } if (typeof speechSynthesis.addEventListener === 'function') { speechSynthesis.addEventListener('voiceschanged', function(){ state.voice = pickVoice(); }); } state.voice = pickVoice(); // ── Utterance queue ───────────────────────────────────────── function speakNext() { if (state.chunkIndex >= chunks.length) { stopAll(true); return; } var u = new SpeechSynthesisUtterance(chunks[state.chunkIndex]); u.rate = state.rate; u.pitch = 1; u.volume = 1; // Setting `lang` explicitly is what triggers the Spanish // synthesis backend on Chrome/Edge (which shipped neural // Spanish voices that aren't always exposed via getVoices // until referenced). When `voice` is set we prefer the // voice's own lang to avoid a mismatch. if (state.voice) { u.voice = state.voice; if (state.voice.lang) u.lang = state.voice.lang; } else { u.lang = (document.documentElement.lang || 'en'); } u.onend = function() { if (!state.playing) return; state.charsSpoken += chunks[state.chunkIndex].length; state.chunkIndex += 1; persist(); updateProgress(); if (state.chunkIndex < chunks.length) { speakNext(); } else { stopAll(true); } }; u.onerror = function(ev) { if (ev && ev.error === 'interrupted') return; state.playing = false; state.paused = false; state.currentUtter = null; renderState(); }; u.onboundary = function(ev) { if (ev && typeof ev.charIndex === 'number') { var partial = state.charsSpoken + Math.min(ev.charIndex, chunks[state.chunkIndex].length); var pct = Math.min(100, (partial / totalChars) * 100); progressEl.style.width = pct + '%'; } }; state.currentUtter = u; speechSynthesis.speak(u); } function play() { if (state.paused) { speechSynthesis.resume(); state.paused = false; state.playing = true; renderState(); return; } // Some browsers leave the queue stuck after a previous error; // cancel before starting fresh. try { speechSynthesis.cancel(); } catch (e) {} state.playing = true; state.paused = false; renderState(); speakNext(); } function pause() { if (!state.playing) return; try { speechSynthesis.pause(); } catch (e) {} state.paused = true; state.playing = false; persist(); renderState(); } function stopAll(reset) { try { speechSynthesis.cancel(); } catch (e) {} state.playing = false; state.paused = false; state.currentUtter = null; if (reset) { state.chunkIndex = 0; state.charsSpoken = 0; progressEl.style.width = '0%'; try { localStorage.removeItem(STORAGE_KEY); } catch (e) {} } renderState(); } // ── Rate cycle ───────────────────────────────────────────── function applyRate(r) { state.rate = r; rateBtn.textContent = r.toFixed(2).replace(/\.?0+$/, '') + 'x'; persist(); } rateBtn.addEventListener('click', function(){ var i = RATE_CYCLE.indexOf(state.rate); var next = RATE_CYCLE[(i + 1) % RATE_CYCLE.length]; applyRate(next); // If currently playing, restart the current chunk at the // new rate (Web Speech doesn't let you change rate mid-utter). if (state.playing && state.currentUtter) { stopAll(false); state.playing = true; renderState(); speakNext(); } }); toggleBtn.addEventListener('click', function(){ if (state.playing) { pause(); } else { play(); } }); // ── Chrome 15-second cutoff workaround ───────────────────── // Chrome stops Web Speech after ~15s of continuous output. We // ping pause+resume every 10s while playing to keep the queue // alive. Harmless on browsers that don't need it. setInterval(function(){ if (state.playing && !state.paused) { try { speechSynthesis.pause(); speechSynthesis.resume(); } catch (e) {} } }, 10000); // ── Persistence + UI ─────────────────────────────────────── function persist() { try { localStorage.setItem(STORAGE_KEY, JSON.stringify({ chunkIndex: state.chunkIndex, charsSpoken: state.charsSpoken, rate: state.rate, })); } catch (e) {} } function updateProgress() { var pct = totalChars ? Math.min(100, (state.charsSpoken / totalChars) * 100) : 0; progressEl.style.width = pct + '%'; } function renderState() { if (!i18n) return; if (state.playing) { player.setAttribute('data-state', 'playing'); titleText.textContent = i18n.dataset.playing; toggleBtn.setAttribute('aria-label', 'Pause'); } else if (state.paused) { player.setAttribute('data-state', 'paused'); titleText.textContent = i18n.dataset.paused; toggleBtn.setAttribute('aria-label', 'Resume'); } else { player.removeAttribute('data-state'); titleText.textContent = i18n.dataset.listen; toggleBtn.setAttribute('aria-label', 'Play'); } } // ── GA4 listen events ───────────────────────────────────── // Fire a small custom event the first time a visitor presses // play, so we can answer "does the listen button move // engagement?" from the analytics dashboard. var firedFirstPlay = false; toggleBtn.addEventListener('click', function(){ if (firedFirstPlay) return; if (typeof window.gtag === 'function') { try { window.gtag('event', 'tts_listen_play', { event_category: 'engagement', event_label: location.pathname, value: 1, }); } catch (e) {} } firedFirstPlay = true; }); // Stop speech when the visitor leaves the page so it doesn't // continue narrating in the background after navigation. window.addEventListener('beforeunload', function(){ try { speechSynthesis.cancel(); } catch (e) {} }); })(); </script> <script type="speculationrules"> {"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/sites/40/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/satellite-theme9/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script src="https://aeogrowthtime.com/wp-content/themes/satellite-theme9/assets/main.js?ver=1.0.2" id="satellite-theme9-main-js"></script> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=DM+Mono:wght@400;500&display=swap" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=DM+Mono:wght@400;500&display=swap"></noscript> <style id="aeo-popup-styles"> #aeo-popup-root { --accent: #E8471A; --accent-dim: #C93C12; --accent-mid: #F07040; --accent-soft: #F9A07A; --card-bg: linear-gradient(105deg, #ffffff 0%, #fff4f0 40%, #ffeee7 70%, #ffffff 100%); --card-fade: #fff8f5; --bar-bg: linear-gradient(105deg, #ffffff 0%, #fff4f0 40%, #ffeee7 70%, #ffffff 100%); --cta-grad: linear-gradient(90deg, #E8471A 0%, #F07040 50%, #E8471A 100%); --cta-text: #ffffff; --shadow-rgb: 232,71,26; --ink: #111111; --ink-soft: #555555; --ink-faint: #999999; --border: #E2E4DC; --banner-h: 88px; /* "Google Sans" is in the stack as the brand fallback for installs that have it locally (e.g. internal Google environments); Inter is the loaded webfont and the de-facto free substitute. */ --font-display: 'Inter', 'Google Sans', system-ui, sans-serif; --font-body: 'Inter', 'Google Sans', system-ui, sans-serif; --font-mono: 'DM Mono', ui-monospace, Menlo, monospace; } #aeo-popup-root, #aeo-popup-root * { box-sizing: border-box; } @keyframes aeoPulse { 0%,100% { opacity:1; transform:scale(1); } 50% { opacity:.4; transform:scale(.7); } } @keyframes aeoCtaShimmer { 0% { background-position:0% 0%; } 50% { background-position:100% 0%; } 100% { background-position:0% 0%; } } @keyframes aeoBannerBreathe{ 0% { background-position:0% 50%; } 50% { background-position:100% 50%; } 100% { background-position:0% 50%; } } @keyframes aeoCardSlideUp { to { transform: translateY(0); opacity: 1; } } @keyframes aeoCardSlideDown{ to { transform: translateY(calc(100% + 32px)); opacity: 0; } } @keyframes aeoBarSlideUp { to { transform: translateY(0); opacity: 1; } } @keyframes aeoScTicker { 0% { transform: translateX(0); } 100% { transform: translateX(-33.3333%); } } /* ── STICKY CARD (bottom-left, initial state) ────────────────────── Default state is hidden -- JS adds .aeo-iframe-ready on the root once the modal iframe has finished loading in the background (or after a safety timeout), so the slide-up coincides with the funnel being click-ready. */ #aeo-popup-root .sticky-card { position: fixed; bottom: 24px; left: 24px; z-index: 9990; width: 340px; border-radius: 16px; overflow: hidden; border: 1px solid var(--border); box-shadow: 0 8px 40px rgba(var(--shadow-rgb),0.15), 0 2px 8px rgba(0,0,0,0.07); background: var(--card-bg); background-size: 300% 300%; transform: translateY(calc(100% + 32px)); opacity: 0; } #aeo-popup-root.aeo-iframe-ready .sticky-card { animation: aeoCardSlideUp 0.6s cubic-bezier(0.22,1,0.36,1) forwards, aeoBannerBreathe 5s ease-in-out 0.6s infinite; } #aeo-popup-root.aeo-skip-card .sticky-card { display: none; } #aeo-popup-root.aeo-lead-done .sticky-card, #aeo-popup-root.aeo-lead-done .sticky-banner { display: none; } #aeo-popup-root .sticky-card.hiding { animation: aeoCardSlideDown 0.4s cubic-bezier(0.4,0,1,1) forwards !important; } /* ── Border Beam ─────────────────────────────────────── A bright accent-coloured "comet" travels around the card perimeter. Implemented as a single ::before pseudo-element: 1. conic-gradient paints the comet (transparent for ~75% of the circle, then a soft -> bright -> soft fade across the last ~100°), 2. mask-composite:exclude cuts the inside out so only a 2px ring remains -- the comet appears to glide along the border, 3. @property animates the gradient's `from` angle so the rotation is on the gradient itself, not via transform (no sub-pixel shimmer, no GPU compositing cost, and the corners stay sharp). Browsers without @property (older Firefox <128, older Safari <16.4) render the gradient statically -- graceful degradation. */ @property --aeo-beam-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; } #aeo-popup-root .sticky-card::before { content: ''; position: absolute; inset: 0; border-radius: inherit; padding: 2px; background: conic-gradient( from var(--aeo-beam-angle), transparent 0deg, transparent 250deg, var(--accent-soft) 305deg, var(--accent) 340deg, var(--accent-soft) 360deg ); -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; pointer-events: none; z-index: 1; opacity: 0; transition: opacity .4s ease; } #aeo-popup-root.aeo-iframe-ready .sticky-card::before { opacity: 1; animation: aeoBeamRotate 5s linear infinite; } @keyframes aeoBeamRotate { to { --aeo-beam-angle: 360deg; } } #aeo-popup-root .sc-inner { padding: 18px 18px 20px; } #aeo-popup-root .sc-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; } #aeo-popup-root .sc-label { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent-dim); display: flex; align-items: center; gap: 6px; } #aeo-popup-root .sc-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); animation: aeoPulse 2s ease-in-out infinite; flex-shrink: 0; } #aeo-popup-root .sc-close { width: 26px; height: 26px; border-radius: 50%; border: 1px solid var(--border); background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; color: var(--ink-faint); font-size: 16px; line-height: 1; transition: border-color .2s, color .2s, background .2s; flex-shrink: 0; padding: 0; } #aeo-popup-root .sc-close:hover { border-color: var(--ink); color: var(--ink); background: #F5F6F2; } #aeo-popup-root .sc-headline { font-family: var(--font-display); font-size: 19px; font-weight: 800; color: var(--ink); letter-spacing: -0.4px; line-height: 1.25; margin: 0 0 8px; } #aeo-popup-root .sc-sub { font-size: 13px; color: var(--ink-faint); line-height: 1.5; margin: 0 0 12px; font-family: var(--font-body); } #aeo-popup-root .sc-ticker-wrap { position: relative; overflow: hidden; margin-bottom: 14px; height: 28px; } #aeo-popup-root .sc-ticker-wrap::before, #aeo-popup-root .sc-ticker-wrap::after { content: ''; position: absolute; inset-block: 0; width: 20px; z-index: 2; pointer-events: none; } #aeo-popup-root .sc-ticker-wrap::before { left: 0; background: linear-gradient(to right, var(--card-fade), transparent); } #aeo-popup-root .sc-ticker-wrap::after { right: 0; background: linear-gradient(to left, var(--card-fade), transparent); } #aeo-popup-root .sc-ticker { /* Marquee math (do not change without revisiting both this rule AND the aeoScTicker keyframe + the JS that builds the chip list): - Each chip is 28px wide with an 8px trailing margin = 36px slot. - We render 3 copies of the 6-engine ticker = 18 chips = 648px. - One copy width = 6 * 36 = 216px = exactly 1/3 of the total. - The keyframe translates -33.3333% (= -216px), so the moment the first copy finishes scrolling out, the second copy is already occupying its exact original position. Seamless loop. We use margin-right on the chip (not flex gap) on purpose: flex gap only sits *between* siblings, which is one short for the cycle to line up with translateX. margin-right counts on every chip, so the total width is N*(chip+gap) and -1/N translation hits the boundary cleanly. Three copies is also what keeps the right edge of the card from ever going empty mid-scroll -- a single copy (216px) is narrower than the visible card content area, so doubled content would leave a gap on the right at the end of every cycle. */ display: flex; width: max-content; animation: aeoScTicker 18s linear infinite; align-items: center; height: 100%; } #aeo-popup-root .sc-logo-chip { width: 28px; height: 28px; border-radius: 8px; flex-shrink: 0; margin-right: 8px; display: flex; align-items: center; justify-content: center; overflow: hidden; /* Faint inset border. On dark/coloured chips it's invisible; on the white Copilot chip it's what keeps the icon from floating against the light card background. */ box-shadow: inset 0 0 0 1px rgba(0,0,0,0.06); } #aeo-popup-root .sc-logo-chip img { width: 18px; height: 18px; object-fit: contain; display: block; filter: drop-shadow(0 1px 1px rgba(0,0,0,0.15)); } /* Copilot-specific override: Microsoft's multicolor ribbon mark has finer detail than any of the other engines' marks (which are single- colour silhouettes), and its lighter gradient tips (cyan, yellow, pink) wash out at small sizes on a white chip. Bumping the image to nearly fill the 28px chip restores legibility. We target by [title] so future engine additions don't accidentally pick this up. */ #aeo-popup-root .sc-logo-chip[title="Copilot"] img { width: 24px; height: 24px; /* No drop-shadow on the Copilot icon -- the soft glow muddies the gradient ribbon. */ filter: none; } #aeo-popup-root .sc-cta { display: flex; align-items: center; justify-content: center; gap: 6px; width: 100%; font-family: var(--font-body); font-size: 14px; font-weight: 600; color: var(--cta-text); background: var(--cta-grad); background-size: 200% 100%; border: none; border-radius: 100px; padding: 11px 20px; cursor: pointer; text-decoration: none; animation: aeoCtaShimmer 3s ease-in-out 2.4s infinite; transition: transform .15s, box-shadow .2s; } #aeo-popup-root .sc-cta:hover { transform: scale(1.02); box-shadow: 0 4px 20px rgba(var(--shadow-rgb),0.4); animation-play-state: paused; } #aeo-popup-root .sc-cta .arrow { font-size: 15px; transition: transform .2s; } #aeo-popup-root .sc-cta:hover .arrow { transform: translateX(3px); } /* ── STICKY BAR (after card dismissed) ──────────────────────────── */ #aeo-popup-root .sticky-banner { position: fixed; bottom: 0; left: 0; right: 0; z-index: 9990; transform: translateY(100%); opacity: 0; pointer-events: none; background: var(--bar-bg); background-size: 300% 300%; border-top: 1px solid var(--border); box-shadow: 0 -4px 32px rgba(var(--shadow-rgb),0.08), 0 -1px 0 rgba(var(--shadow-rgb),0.15); } #aeo-popup-root .sticky-banner.visible { pointer-events: all; animation: aeoBarSlideUp 0.5s cubic-bezier(0.22,1,0.36,1) forwards, aeoBannerBreathe 5s ease-in-out 0.5s infinite; } #aeo-popup-root .sticky-banner::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, var(--accent) 0%, var(--accent-soft) 60%, transparent 100%); } #aeo-popup-root .banner-inner { max-width: 1240px; margin: 0 auto; padding: 0 32px; height: var(--banner-h); display: flex; align-items: center; gap: 24px; } #aeo-popup-root .banner-label { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--accent-dim); white-space: nowrap; flex-shrink: 0; display: flex; align-items: center; gap: 6px; } #aeo-popup-root .banner-label::before { content: ''; display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: var(--accent); animation: aeoPulse 2s ease-in-out infinite; } #aeo-popup-root .banner-divider-v { width: 1px; height: 32px; background: var(--border); flex-shrink: 0; } #aeo-popup-root .banner-headline { font-family: var(--font-display); font-size: 15px; font-weight: 800; color: var(--ink); letter-spacing: -0.3px; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; margin: 0; } #aeo-popup-root .banner-sub { font-size: 13px; color: var(--ink-faint); flex-shrink: 0; white-space: nowrap; font-family: var(--font-body); } #aeo-popup-root .banner-cta { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-body); font-size: 14px; font-weight: 600; color: var(--cta-text); background: var(--cta-grad); background-size: 200% 100%; border: none; border-radius: 100px; padding: 11px 28px; cursor: pointer; text-decoration: none; white-space: nowrap; flex-shrink: 0; animation: aeoCtaShimmer 3s ease-in-out 0.5s infinite; transition: transform .15s, box-shadow .2s; } #aeo-popup-root .banner-cta:hover { transform: scale(1.03); box-shadow: 0 4px 20px rgba(var(--shadow-rgb),0.4); animation-play-state: paused; } #aeo-popup-root .banner-cta .arrow { font-size: 16px; line-height: 1; transition: transform .2s; } #aeo-popup-root .banner-cta:hover .arrow { transform: translateX(3px); } /* ── IFRAME MODAL (full-screen takeover) ────────────────────────── */ /* Matches the Verdict V2 full-page lead capture pattern: edge-to-edge shell, no card chrome, just a translucent floating top bar with "Back to article" and a close pill. The AEO funnel's own branding inside the iframe carries the visual weight. */ #aeo-popup-root .aeo-modal { position: fixed; inset: 0; z-index: 10000; background: #ffffff; display: flex; flex-direction: column; opacity: 0; pointer-events: none; transition: opacity .25s ease; } #aeo-popup-root .aeo-modal.open { opacity: 1; pointer-events: all; } #aeo-popup-root .aeo-modal-backdrop { display: none; } #aeo-popup-root .aeo-modal-shell { position: relative; z-index: 1; display: flex; flex-direction: column; width: 100%; height: 100%; background: #ffffff; } #aeo-popup-root .aeo-modal-bar { position: relative; z-index: 3; display: flex; align-items: center; justify-content: space-between; padding: 12px 20px; background: #ffffff; border-bottom: 1px solid rgba(0,0,0,0.06); flex-shrink: 0; } #aeo-popup-root .aeo-modal-back { display: inline-flex; align-items: center; gap: 6px; font-family: var(--font-body); font-size: 13px; font-weight: 500; color: var(--ink-soft); background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: 8px; transition: background .15s, color .15s; } #aeo-popup-root .aeo-modal-back:hover { background: #F0F1EC; color: var(--ink); } #aeo-popup-root .aeo-modal-iframe-wrap { position: relative; flex: 1; background: #ffffff; overflow: hidden; } #aeo-popup-root .aeo-modal-iframe { width: 100%; height: 100%; border: 0; display: block; background: #ffffff; } #aeo-popup-root .aeo-modal-loading { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-faint); background: #ffffff; transition: opacity .3s ease; z-index: 1; pointer-events: none; } #aeo-popup-root .aeo-modal-iframe-wrap.loaded .aeo-modal-loading { opacity: 0; } #aeo-popup-root .aeo-modal-loading .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); animation: aeoPulse 1.2s ease-in-out infinite; margin-right: 8px; } /* lock background scroll when modal is open */ body.aeo-modal-open { overflow: hidden; } /* Bar collapses to headline + CTA on narrower viewports, but the card keeps its 340px bottom-left footprint all the way down to phone widths. Real phones (≤480px) get the full-width card so the CTA stays tappable. */ @media (max-width: 900px) { #aeo-popup-root .banner-inner { padding: 0 16px; gap: 12px; } #aeo-popup-root .banner-label, #aeo-popup-root .banner-divider-v, #aeo-popup-root .banner-sub { display: none; } #aeo-popup-root .banner-headline { font-size: 13px; } #aeo-popup-root .banner-cta { font-size: 13px; padding: 9px 18px; } } @media (max-width: 480px) { #aeo-popup-root .sticky-card { left: 12px; bottom: 12px; width: calc(100vw - 24px); } } @media (prefers-reduced-motion: reduce) { #aeo-popup-root .sticky-card, #aeo-popup-root .sticky-banner.visible, #aeo-popup-root .sc-cta, #aeo-popup-root .banner-cta { animation: none !important; } #aeo-popup-root.aeo-iframe-ready .sticky-card { transform: none; opacity: 1; } } </style> <div id="aeo-popup-root" data-variant="small-report" data-domain="aeogrowthtime.com"> <div class="sticky-card" id="aeoStickyCard" role="complementary" aria-label="AI Visibility Radar — Free AEO Report"> <div class="sc-inner"> <div class="sc-header"> <span class="sc-label"><span class="sc-dot"></span>AI VISIBILITY RADAR</span> <button type="button" class="sc-close" id="aeoCardClose" aria-label="Dismiss">×</button> </div> <p class="sc-headline">Are AI engines recommending your brand?</p> <p class="sc-sub">Check your score on 5 AI engines — instantly.</p> <div class="sc-ticker-wrap"><div class="sc-ticker" id="aeoScTicker"></div></div> <a href="#" class="sc-cta" id="aeoCardCta"> Check for Free <span class="arrow">→</span> </a> </div> </div> <div class="sticky-banner" id="aeoStickyBanner" role="complementary" aria-label="AI Visibility Radar — Free AEO Report"> <div class="banner-inner"> <span class="banner-label">AI VISIBILITY RADAR</span> <div class="banner-divider-v"></div> <p class="banner-headline">Are AI engines recommending your brand?</p> <span class="banner-sub">Check your score on 5 AI engines — instantly.</span> <a href="#" class="banner-cta" id="aeoBarCta"> Check for Free <span class="arrow">→</span> </a> </div> </div> <div class="aeo-modal" id="aeoModal" role="dialog" aria-modal="true" aria-label="AI Visibility Radar — Free AEO Report" aria-hidden="true"> <div class="aeo-modal-backdrop" data-aeo-close></div> <div class="aeo-modal-shell"> <header class="aeo-modal-bar"> <button type="button" class="aeo-modal-back" data-aeo-close> <span aria-hidden="true">←</span> Back to article </button> </header> <div class="aeo-modal-iframe-wrap" id="aeoModalIframeWrap"> <div class="aeo-modal-loading"><span class="dot"></span>Loading report…</div> <iframe id="aeoModalIframe" class="aeo-modal-iframe" title="AI Visibility Radar — Free AEO Report" referrerpolicy="no-referrer-when-downgrade" allow="clipboard-write" src="https://aeo.prod-mobtools.com/aeo/small-report?embed=1&utm_source=aeogrowthtime.com&utm_medium=satellite&utm_campaign=aeo-popup&utm_content=small-report"></iframe> </div> </div> </div> </div> <script id="aeo-popup-script"> (function () { var root = document.getElementById('aeo-popup-root'); if (!root) return; var card = document.getElementById('aeoStickyCard'); var bar = document.getElementById('aeoStickyBanner'); var modal = document.getElementById('aeoModal'); var iframe = document.getElementById('aeoModalIframe'); var wrap = document.getElementById('aeoModalIframeWrap'); var closeBtn = document.getElementById('aeoCardClose'); var cardCta = document.getElementById('aeoCardCta'); var barCta = document.getElementById('aeoBarCta'); var ticker = document.getElementById('aeoScTicker'); /* ---------- analytics -------------------------------- Posts to the existing /wp-json/satellite/v1/lead-event proxy, which forwards to the backend's POST /api/leads/event. Events here are prefixed with "aeo_" so the lawyer funnel chart on the same dashboard never picks them up. ----------------------------------------------------- */ var AEO_DOMAIN = "aeogrowthtime.com"; var AEO_VARIANT = "small-report"; var AEO_NICHE = "marketing"; var AEO_EVENT_URL = "https:\/\/aeogrowthtime.com\/wp-json\/satellite\/v1\/lead-event"; var AEO_EVENT_NONCE = "995c2dcb6b"; /* localStorage visitor_id so unique-clicker counts on the dashboard are stable across sessions on the same browser. UUIDv4-ish via random bytes; no PII, just a stable handle for COUNT(DISTINCT) on the backend. */ function aeoGetVisitorId() { try { var KEY = 'aeo_vid'; var existing = localStorage.getItem(KEY); if (existing) return existing; var b = (crypto && crypto.getRandomValues) ? crypto.getRandomValues(new Uint8Array(16)) : (function () { var arr = []; for (var i=0;i<16;i++) arr.push(Math.floor(Math.random()*256)); return arr; })(); b[6] = (b[6] & 0x0f) | 0x40; // version 4 b[8] = (b[8] & 0x3f) | 0x80; // variant var hex = Array.prototype.map.call(b, function (x) { return ('0' + x.toString(16)).slice(-2); }).join(''); var id = hex.slice(0,8)+'-'+hex.slice(8,12)+'-'+hex.slice(12,16)+'-'+hex.slice(16,20)+'-'+hex.slice(20,32); localStorage.setItem(KEY, id); return id; } catch (e) { return ''; // private mode / disabled storage -- silently drop } } var AEO_VISITOR_ID = aeoGetVisitorId(); function aeoTrack(eventType, extraMeta) { try { var meta = { variant: AEO_VARIANT, niche: AEO_NICHE }; if (extraMeta) for (var k in extraMeta) if (Object.prototype.hasOwnProperty.call(extraMeta, k)) meta[k] = extraMeta[k]; var payload = { domain: AEO_DOMAIN, event_type: eventType, visitor_id: AEO_VISITOR_ID, page_url: location.href, metadata_json: JSON.stringify(meta) }; var body = JSON.stringify(payload); if (navigator.sendBeacon) { navigator.sendBeacon( AEO_EVENT_URL + '?_wpnonce=' + encodeURIComponent(AEO_EVENT_NONCE), new Blob([body], { type: 'application/json' }) ); } else { fetch(AEO_EVENT_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': AEO_EVENT_NONCE }, body: body, keepalive: true }); } } catch (e) { /* analytics must never break the popup */ } } /* ---------- cookies ---------- */ function readCookie(name) { var m = document.cookie.match('(?:^|;)\\s*' + name + '=([^;]*)'); return m ? decodeURIComponent(m[1]) : ''; } function writeCookie(name, value, days) { var d = new Date(); d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000); document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + d.toUTCString() + '; path=/; SameSite=Lax'; } /* Cookie names are versioned. An earlier iteration of this script set aeo_lead_done from a 15s dwell-time heuristic (since removed); any tester who left the modal open during that period now carries a 30-day cookie that silently hides the popup forever. Bumping the name to _v2 retires that stale state without forcing anyone to clear browser cookies. */ var CARD_DISMISSED = 'aeo_card_dismissed_v2'; var LEAD_DONE = 'aeo_lead_done_v2'; if (readCookie(LEAD_DONE) === '1') { root.classList.add('aeo-lead-done'); return; } /* ---------- reveal the card (or bar) ---------- The iframe is preloading in the background regardless of card state, so we don't gate reveal on it -- we just slide the card up on a quick fixed timer so the popup is visible reliably on every refresh, even when the cross-origin iframe's load event is slow or never fires. By the time the user finishes reading the article and clicks the CTA, the iframe is virtually always fully loaded, so clicks still open the modal instantly. */ var revealed = false; var dismissedBefore = readCookie(CARD_DISMISSED) === '1'; if (dismissedBefore) root.classList.add('aeo-skip-card'); function reveal() { if (revealed) return; revealed = true; if (dismissedBefore) { if (bar) bar.classList.add('visible'); aeoTrack('aeo_bar_impression', { source: 'bar' }); } else { root.classList.add('aeo-iframe-ready'); aeoTrack('aeo_impression', { source: 'card' }); } } /* 600ms is long enough to feel intentional (not jarring on first paint), short enough that it always wins against a slow cross-origin iframe. */ setTimeout(reveal, 600); /* ---------- ticker ---------- Three full copies of the chip list, not two. The aeoScTicker keyframe translates by exactly one copy's width (-33.3333%) so the second copy slides into the first's position seamlessly; the third copy is there to keep the right edge of the card filled while the second is doing the heavy lifting -- one copy alone (216px) is narrower than the visible card content area, so a doubled ticker leaves a visible gap at the right edge near the end of every animation cycle. */ var TOOLS = [{"name":"Gemini","bg":"#1A73E8","logo":"https:\/\/aeogrowthtime.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/gemini.svg"},{"name":"Grok","bg":"#111111","logo":"https:\/\/aeogrowthtime.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/grok.svg"},{"name":"Perplexity","bg":"#1FB8CD","logo":"https:\/\/aeogrowthtime.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/perplexity.svg"},{"name":"ChatGPT","bg":"#10A37F","logo":"https:\/\/aeogrowthtime.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/chatgpt.svg"},{"name":"Copilot","bg":"#FFFFFF","logo":"https:\/\/aeogrowthtime.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/copilot.svg"},{"name":"Claude","bg":"#D97757","logo":"https:\/\/aeogrowthtime.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/claude.svg"}]; if (ticker) { var tripled = TOOLS.concat(TOOLS).concat(TOOLS); ticker.innerHTML = tripled.map(function (t) { return '<div class="sc-logo-chip" title="' + t.name + '" style="background:' + t.bg + ';">' + '<img src="' + t.logo + '" alt="' + t.name + '" loading="lazy" width="18" height="18">' + '</div>'; }).join(''); } /* ---------- card -> bar dismissal ---------- The slide-down animation is 0.4s. We use a matched setTimeout instead of animationend because Chrome occasionally swallows the event when another animation (the breathing background) is in flight on the same element. */ if (closeBtn) { closeBtn.addEventListener('click', function () { writeCookie(CARD_DISMISSED, '1', 30); aeoTrack('aeo_card_dismiss', { source: 'card' }); card.classList.add('hiding'); setTimeout(function () { card.style.display = 'none'; if (bar) bar.classList.add('visible'); }, 420); }); } /* ---------- modal open / close ---------- */ if (iframe && wrap) { if (iframe.complete) wrap.classList.add('loaded'); else iframe.addEventListener('load', function () { wrap.classList.add('loaded'); }, { once: true }); } function swapCardToBar() { if (!card || card.style.display === 'none' || card.classList.contains('hiding')) return; card.classList.add('hiding'); setTimeout(function () { card.style.display = 'none'; if (bar) bar.classList.add('visible'); }, 420); } function openModal(e) { if (e) e.preventDefault(); if (!modal) return; modal.setAttribute('aria-hidden', 'false'); requestAnimationFrame(function () { modal.classList.add('open'); }); document.body.classList.add('aeo-modal-open'); } function closeModal() { if (!modal || !modal.classList.contains('open')) return; modal.classList.remove('open'); document.body.classList.remove('aeo-modal-open'); setTimeout(function () { modal.setAttribute('aria-hidden', 'true'); }, 320); aeoTrack('aeo_modal_close'); /* If the card was still showing behind the modal, collapse it to the bar so the user has an obvious re-entry point. No cookie is set here -- only the explicit X on the card persists dismissal across page loads. */ swapCardToBar(); } if (cardCta) cardCta.addEventListener('click', function (e) { aeoTrack('aeo_cta_click', { source: 'card' }); openModal(e); }); if (barCta) barCta.addEventListener('click', function (e) { aeoTrack('aeo_cta_click', { source: 'bar' }); openModal(e); }); /* Generic trigger: any element with [data-aeo-open] opens the same modal. The in-article banner (aeo-inline-banner.php) uses this so it doesn't have to duplicate the modal HTML/JS -- it just renders a CTA with data-aeo-open + data-aeo-source="inline" and rides on the popup infrastructure that's already in the footer. Source is read from data-aeo-source so we can split CTR by surface in the analytics dashboard (card / bar / inline / future surfaces). */ document.querySelectorAll('[data-aeo-open]').forEach(function (el) { el.addEventListener('click', function (e) { var source = el.getAttribute('data-aeo-source') || 'external'; aeoTrack('aeo_cta_click', { source: source }); openModal(e); }); }); if (modal) { modal.querySelectorAll('[data-aeo-close]').forEach(function (el) { el.addEventListener('click', closeModal); }); } document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && modal && modal.classList.contains('open')) closeModal(); }); /* ---------- future postMessage handshake (stub) ---------- Listens for a "lead-complete" event from the iframe so we can flip the LEAD_DONE cookie immediately on real submission (not on dwell time). Wire this up on the AEO side and remove the dwell-time fallback above. */ window.addEventListener('message', function (e) { if (!e || !e.origin || e.origin.indexOf('aeo.prod-mobtools.com') === -1) return; var data = e.data || {}; if (data && data.type === 'aeo:lead-complete') { writeCookie(LEAD_DONE, '1', 30); root.classList.add('aeo-lead-done'); closeModal(); } }); })(); </script> <script> (function(){ var bar = document.getElementById('reading-progress'); if(!bar) return; var article = document.querySelector('.post-content'); if(!article) return; var milestones = {25:false,50:false,75:false,100:false}; var startTime = Date.now(); function sendGA4(name, params){ if (window.gtag) window.gtag('event', name, params); } window.addEventListener('scroll', function(){ var rect = article.getBoundingClientRect(); var total = article.offsetHeight - window.innerHeight; var progress = Math.min(100, Math.max(0, (-rect.top / total) * 100)); bar.style.width = progress + '%'; var pct = Math.floor(progress); [25,50,75,100].forEach(function(m){ if (pct >= m && !milestones[m]) { milestones[m] = true; sendGA4('scroll_depth', {percent: m, reading_seconds: Math.round((Date.now()-startTime)/1000)}); } }); }, {passive:true}); function sendReadingTime(){ var seconds = Math.round((Date.now()-startTime)/1000); if (seconds > 3) sendGA4('reading_time', {seconds: seconds}); } document.addEventListener('visibilitychange', function(){ if(document.visibilityState==='hidden') sendReadingTime(); }); window.addEventListener('beforeunload', sendReadingTime); })(); </script> <script> (function(){ var toc = document.querySelector('.toc-container'); if(!toc) return; var title = toc.querySelector('.toc-title'); if(window.innerWidth <= 768 && title) { toc.classList.add('toc-collapsed'); title.addEventListener('click', function(){ toc.classList.toggle('toc-collapsed'); }); } var links = toc.querySelectorAll('.toc-list a'); var sections = []; links.forEach(function(a){ var id = a.getAttribute('href'); if(id) { var el = document.querySelector(id); if(el) sections.push({el:el,link:a}); } }); if(!sections.length) return; var raf; window.addEventListener('scroll', function(){ if(raf) return; raf = requestAnimationFrame(function(){ raf = null; var scrollY = window.scrollY + 120; var active = sections[0]; for(var i=0;i<sections.length;i++){ if(sections[i].el.offsetTop <= scrollY) active = sections[i]; } links.forEach(function(l){ l.classList.remove('toc-active'); }); if(active) active.link.classList.add('toc-active'); }); }, {passive:true}); })(); </script> </body> </html>