Brand Exposure: 90-Day Plan for 2026 Success

Listen to this article · 16 min listen

A brand exposure studio is a website dedicated to providing actionable strategies and creative inspiration to help businesses and individuals amplify their brand presence and reach their target audience in today’s competitive market. Building genuine brand visibility isn’t just about throwing money at ads anymore; it’s about strategic, consistent effort that resonates with your ideal customer. So, how do you cut through the noise and truly connect?

Key Takeaways

  • Conduct a thorough competitive analysis using tools like Semrush to identify content gaps and keyword opportunities, aiming for at least 15 high-volume, low-competition keywords.
  • Develop a content calendar for 90 days, integrating a mix of blog posts, video scripts, and social media content tailored to specific platform algorithms.
  • Implement an active outreach strategy for digital PR, targeting a minimum of 5 relevant industry publications or influencers per month for guest posting or collaboration.
  • Utilize A/B testing for all primary call-to-actions on your website and email campaigns, aiming for a measurable conversion rate improvement of at least 10% within a quarter.

1. Define Your Audience Persona with Granular Detail

Before you even think about content, you need to know exactly who you’re talking to. I mean, exactly. This isn’t just demographics; it’s psychographics, pain points, aspirations, and even their daily routines. We use a proprietary template that goes beyond typical age and income brackets. We want to know: What keeps them up at 3 AM? What podcasts do they listen to? What specific jargon do they use?

To start, gather data from your existing customer base. Look at Google Analytics for demographic insights (Audience > Demographics > Age/Gender), and delve into your social media analytics on platforms like Meta Business Suite for audience interests and behaviors. For a truly deep dive, I always recommend conducting 5-10 direct interviews with your ideal customers or surveying your current email list. Ask open-ended questions about their challenges and how they seek solutions.

Pro Tip: Don’t just create one persona. Most businesses have 2-3 primary personas. Name them, give them a backstory, and even find a stock photo that represents them. When you’re writing, literally imagine you’re speaking to “Marketing Manager Melissa” or “Small Business Owner Sam.”

Common Mistakes: Creating overly generic personas that don’t differentiate your audience. Thinking your product is for “everyone” is a surefire way to connect with no one. Another trap is relying solely on demographic data; behavior and motivations are far more telling.

2. Conduct a Comprehensive Competitive Content Audit

Once you know who you’re talking to, you need to know what they’re already consuming and who else is talking to them. This involves a deep dive into your competitors’ content strategies. We use Semrush extensively for this.

First, identify your top 3-5 direct competitors. Input their domains into Semrush’s “Organic Research” tool. Look at their top organic keywords and the pages ranking for those keywords. Pay close attention to:

  • Top Pages: Which of their content pieces are driving the most traffic?
  • Keyword Gaps: Where are they ranking that you aren’t? More importantly, where are they not ranking for keywords that are highly relevant to your audience and offerings? This is your gold mine.
  • Backlink Profiles: Who is linking to their content? These are potential outreach targets for your own superior content.

Next, use Semrush’s “Keyword Magic Tool.” Enter broad topics related to your niche and filter by search volume, keyword difficulty, and intent. Look for keywords with high search volume (e.g., 1,000+ monthly searches) but relatively low keyword difficulty (below 60, ideally much lower for newer sites). Aim to identify at least 15 such keywords that directly align with your audience’s pain points.

Screenshot Description: Imagine a screenshot showing the Semrush Keyword Magic Tool interface. In the search bar, “digital marketing strategies” is entered. Below, a table displays various long-tail keywords like “small business social media strategy,” “b2b content marketing tips,” and “local SEO for startups,” along with their search volume, keyword difficulty scores, and estimated CPC. The “Difficulty” column is highlighted, showing several keywords with scores under 50.

I had a client last year, a boutique cybersecurity firm, who insisted their audience only cared about “advanced threat detection.” After a competitive audit, we discovered their competitors were actually gaining significant traction by addressing much simpler concerns like “how to secure remote work” and “phishing email examples.” We pivoted their content strategy, and within three months, their organic traffic from those “simpler” topics increased by 180%.

3. Develop a Multi-Channel Content Strategy & Calendar

Content isn’t just blog posts anymore. It’s video, it’s audio, it’s interactive tools, it’s social media snippets. Your strategy needs to be diverse and tailored to each platform.

Based on your audience personas and keyword research, brainstorm content ideas. For each idea, consider:

  • Primary Format: Blog post, YouTube video, podcast episode, infographic, LinkedIn article, etc.
  • Repurposing Opportunities: How can you chop up a long blog post into 5 social media graphics, 3 short video clips, and an email newsletter segment?
  • Target Keywords: Which specific keywords will this piece of content aim to rank for?

We use a shared Google Sheet as our content calendar, typically planning 90 days out. Columns include: Content Title, Primary Keyword, Content Type, Target Audience Persona, Platform(s), Status, Due Date, and Author. This helps us visualize the flow and ensure we’re hitting all our target areas.

Pro Tip: Don’t try to be everywhere at once. Focus on 2-3 platforms where your audience is most active and where your content can genuinely shine. For B2B, LinkedIn is usually non-negotiable. For B2C, it might be Pinterest or YouTube.

Common Mistakes: Creating content for content’s sake without a clear purpose or keyword target. Also, neglecting to repurpose content is a massive waste of effort. One great piece of content can fuel a month’s worth of social media posts.

4. Master On-Page SEO for Maximum Visibility

Even the most brilliant content won’t get seen if it’s not optimized for search engines. This is where on-page SEO comes in. When publishing any piece of content, follow these steps meticulously:

  • Keyword in Title Tag: Your primary keyword must be in your `` tag, ideally at the beginning. Keep it under 60 characters for optimal display in search results.</li> <li><strong>Keyword in H1:</strong> Your main heading (`<br /> <h1>`) should also include your primary keyword.</li> <li><strong>Keyword in URL:</strong> Make your URL short, descriptive, and include your primary keyword (e.g., `yourdomain.com/social-media-strategy-small-business`).</li> <li><strong>Keyword Density & LSI:</strong> Naturally weave your primary keyword and related Latent Semantic Indexing (LSI) keywords throughout your content. Don’t stuff keywords; aim for a natural flow. Tools like <a href="https://surferseo.com/" target="_blank" rel="noopener">Surfer SEO</a> or <a href="https://frase.io/" target="_blank" rel="noopener">Frase</a> can help identify relevant LSI terms.</li> <li><strong>Internal Linking:</strong> Link to 2-3 other relevant pages on your website within your content. This helps search engines understand your site structure and passes “link juice.”</li> <li><strong>External Linking:</strong> Link out to 1-2 authoritative, relevant external sources. This signals to search engines that your content is well-researched.</li> <li><strong>Image Optimization:</strong> Compress images to improve page load speed. Use descriptive `alt` tags for all images, including your primary keyword where appropriate.</li> <li><strong>Meta Description:</strong> Write a compelling meta description (under 160 characters) that includes your primary keyword and encourages clicks. This doesn’t directly impact ranking but <em>does</em> impact click-through rate.</li> </ul> <p><strong>Screenshot Description:</strong> A screenshot of a WordPress post editor with the Yoast SEO plugin active. The “Readability” and “SEO” analysis tabs are visible, showing green lights for good optimization. Specific fields like “SEO Title,” “Slug,” and “Meta Description” are filled in, with the primary keyword “local SEO for small businesses” clearly present in each. The content body shows bolded keywords and internal/external links.</p> <p>We ran into this exact issue at my previous firm. A client had fantastic, in-depth articles, but their on-page SEO was non-existent. Titles were vague, images had no alt text, and URLs were auto-generated gibberish. Simply going back and optimizing their top 20 articles led to a 45% increase in organic traffic to those pages within four months. It’s low-hanging fruit, people! You can avoid many <a href="https://brandexposurestudio.com/seo-marketing-5-fatal-flaws-in-2026/">fatal SEO flaws</a> with a proactive approach.</p> <h2 id="section-6">5. Implement a Proactive Digital PR and Backlink Strategy</h2> <p>Content is king, but backlinks are the queen – and she wears the pants. High-quality backlinks from authoritative websites tell search engines that your content is trustworthy and valuable. This is crucial for ranking.</p> <p>Our strategy focuses on relationship building and value exchange:</p> <ul> <li><strong>Guest Posting:</strong> Identify relevant industry blogs and news sites that accept guest contributions. Pitch unique, valuable content ideas that haven’t been covered extensively on their site. Use tools like <a href="https://ahrefs.com/" target="_blank" rel="noopener">Ahrefs</a> to find sites that link to your competitors and analyze their “Top Pages by Links” to see who’s linking to <em>them</em>.</li> <li><strong>Broken Link Building:</strong> Find broken links on authoritative websites in your niche. Create superior content on that topic, then reach out to the webmaster, inform them of the broken link, and suggest your content as a replacement.</li> <li><strong>Resource Page Outreach:</strong> Identify websites that compile lists of useful resources. If your content is genuinely exceptional, pitch it as a valuable addition to their list.</li> <li><strong>HARO (Help A Reporter Out):</strong> Sign up for HARO. Respond to relevant journalist queries where you can offer expert insights. This can lead to mentions and links from major news outlets.</li> </ul> <p><strong>Case Study:</strong> A client, “EcoSolutions,” a sustainable packaging startup, needed to boost their authority. We identified 10 industry blogs and 3 online trade publications. Over 8 weeks, we pitched and published 4 guest posts on topics like “The Future of Compostable Plastics” and “Supply Chain Sustainability in 2026.” We also secured 2 expert quotes via HARO in prominent business journals. This led to 6 high-quality backlinks and, combined with their optimized content, saw their domain authority increase by 7 points (from 28 to 35) in just three months, significantly improving their search rankings for key terms like “eco-friendly packaging solutions.”</p> <p><strong>Common Mistakes:</strong> Buying backlinks (don’t do it, Google will penalize you). Sending generic, templated outreach emails. Not having genuinely valuable content to offer in exchange for a link.</p> <h2 id="section-7">6. Leverage Paid Media to Accelerate Exposure</h2> <p>While organic growth is vital, paid media can provide immediate exposure and data-rich insights. It’s not just about spending money; it’s about smart spending.</p> <ul> <li><strong>Google Ads:</strong> For bottom-of-the-funnel keywords (those with high commercial intent), <a href="https://ads.google.com/" target="_blank" rel="noopener">Google Ads</a> is unbeatable. Target specific keywords with high conversion potential. Use exact match and phrase match extensively.</li> <li><strong>Exact Settings:</strong> Focus on “Targeting Type: People in or regularly in your targeted locations” for local businesses. Set “Ad rotation: Optimize: Prefer performance ads.” Use conversion tracking religiously.</li> <li><strong>Social Media Ads:</strong> Platforms like <a href="https://business.facebook.com/adsmanager/" target="_blank" rel="noopener">Meta Ads Manager</a> (for Facebook/Instagram) and <a href="https://www.linkedin.com/ad/accounts" target="_blank" rel="noopener">LinkedIn Campaign Manager</a> offer incredibly granular targeting options based on demographics, interests, job titles, and behaviors.</li> <li><strong>Exact Settings:</strong> For Meta, experiment with “Advantage+ shopping campaigns” for e-commerce. For LinkedIn, use “Matched Audiences” to target specific companies or uploaded contact lists. Always A/B test ad creatives, headlines, and calls to action.</li> <li><strong>Retargeting:</strong> This is where the magic happens. Target users who have already visited your website but haven’t converted. These audiences are significantly warmer and convert at much higher rates.</li> </ul> <p>We usually start with a small, focused budget for Google Search Ads on high-intent keywords, then layer in social media ads for brand awareness and retargeting. This balanced approach often yields the best ROI. According to a <a href="https://www.emarketer.com/content/global-digital-ad-spending-2023" target="_blank" rel="noopener">eMarketer report</a>, global digital ad spending is projected to reach over $700 billion by 2026, underscoring the competitive nature and importance of strategic ad placement. For entrepreneurs, <a href="https://brandexposurestudio.com/entrepreneurs-2-3x-roas-on-meta-ads-in-2026/">Meta Ads can be a powerful launchpad</a>.</p> <aside class="related-callout"><span class="related-callout-label">Related Reading</span><a href="https://brandexposurestudio.com/marketing-roi-bridging-the-2026-attribution-gap/">Marketing ROI: Bridging the 2026 Attribution Gap</a></p> <p class="related-callout-excerpt">Understanding and maximizing your return on investment is critical for any marketing strategy.</p> </aside> <h2 id="section-8">7. Optimize for Local SEO (If Applicable)</h2> <p>If your business serves a specific geographic area, local SEO is non-negotiable. It’s often overlooked, yet incredibly powerful.</p> <ul> <li><strong>Google Business Profile (GBP):</strong> Claim and optimize your <a href="https://business.google.com/" target="_blank" rel="noopener">Google Business Profile</a>. Fill out every section completely: business hours, services, photos, and a detailed description. Encourage customers to leave reviews and respond to every single one – good or bad.</li> <li><strong>Local Citations:</strong> Ensure your Name, Address, Phone number (NAP) are consistent across all online directories (Yelp, Yellow Pages, industry-specific directories). Inconsistent NAP information can confuse search engines.</li> <li><strong>Local Keywords:</strong> Target keywords that include your city or region (e.g., “best coffee shop Atlanta,” “plumber Marietta GA”).</li> <li><strong>Local Content:</strong> Create blog posts or resources relevant to your local community. For example, a real estate agent in Buckhead might write about “Top Schools in North Fulton County” or “Luxury Condos near Phipps Plaza.”</li> </ul> <p>I recall a small bakery client in Roswell, Georgia. Their cakes were incredible, but their online presence was dismal. We fully optimized their Google Business Profile, added high-quality photos, and encouraged reviews. Within three months, their “discovery” searches (customers finding them via non-branded queries like “bakery near me”) increased by 250%, translating directly into more foot traffic.</p> <h2 id="section-9">8. Implement Conversion Rate Optimization (CRO)</h2> <p>Getting traffic is great, but traffic without conversions is just noise. CRO is about making your website and landing pages as effective as possible at turning visitors into leads or customers.</p> <ul> <li><strong>Clear Call-to-Actions (CTAs):</strong> Are your CTAs prominent, compelling, and easy to understand? Use action-oriented language (e.g., “Get a Free Quote,” “Download the Guide Now”).</li> <li><strong>A/B Testing:</strong> Use tools like <a href="https://optimize.google.com/" target="_blank" rel="noopener">Google Optimize</a> (though it’s being sunsetted in 2023, alternatives like <a href="https://vwo.com/" target="_blank" rel="noopener">VWO</a> or <a href="https://www.optimizely.com/" target="_blank" rel="noopener">Optimizely</a> are excellent) to test different headlines, button colors, images, and even entire page layouts. Small changes can yield significant results.</li> <li><strong>Exact Settings:</strong> When setting up an A/B test, ensure your sample size is sufficient for statistical significance (Google Optimize used to provide this, VWO does too). Run tests for at least 2-4 weeks to account for weekly traffic fluctuations.</li> <li><strong>Page Speed:</strong> A slow website kills conversions. Use <a href="https://pagespeed.web.dev/" target="_blank" rel="noopener">Google PageSpeed Insights</a> to identify and fix performance bottlenecks. Aim for a mobile score above 90.</li> <li><strong>Mobile Responsiveness:</strong> Over half of all web traffic is mobile. Your site <em>must</em> look and function perfectly on all devices.</li> <li><strong>Simplified Forms:</strong> Only ask for essential information. Every extra field in a form reduces conversion rates.</li> </ul> <p><strong>Common Mistakes:</strong> Not testing at all. Making assumptions about what users want. Prioritizing aesthetics over functionality.</p> <h2 id="section-10">9. Analyze and Adapt with Data</h2> <p>Brand exposure isn’t a “set it and forget it” game. It’s a continuous cycle of analysis, learning, and adaptation.</p> <ul> <li><strong>Google Analytics 4 (GA4):</strong> Regularly review your GA4 data. Look at traffic sources, user behavior flows, conversion paths, and engagement metrics. Identify which channels are performing best and which content pieces are resonating most.</li> <li><strong>Exact Settings:</strong> In GA4, navigate to “Reports > Engagement > Pages and screens” to see your top-performing content. Check “Reports > Acquisition > Traffic acquisition” to understand where your users are coming from. Set up custom events for key actions beyond standard page views.</li> <li><strong>Search Console:</strong> Check <a href="https://search.google.com/search-console/about" target="_blank" rel="noopener">Google Search Console</a> weekly. Monitor your keyword rankings, crawl errors, and click-through rates. This tells you how Google views your site and what search queries users are actually using to find you.</li> <li><strong>Social Media Analytics:</strong> Each platform provides its own analytics. Understand what content types, posting times, and engagement strategies work best for <em>your</em> audience on <em>that specific platform</em>.</li> </ul> <p>We always schedule a monthly review meeting with clients to go over the data. What worked? What didn’t? Where are the new opportunities? This iterative process is what separates good marketing from great marketing. Mastering <a href="https://brandexposurestudio.com/ga4-content-roi-mastering-2026-marketing-data/">GA4 content ROI</a> is essential for this.</p> <h2 id="section-11">10. Build and Nurture an Email List</h2> <p>While social media algorithms change and ad costs fluctuate, your email list remains your most valuable owned asset. It’s a direct line to your most engaged audience.</p> <ul> <li><strong>Lead Magnets:</strong> Offer something valuable in exchange for an email address (e.g., an exclusive guide, a free template, a webinar recording).</li> <li><strong>Prominent Sign-Up Forms:</strong> Place sign-up forms strategically on your website (pop-ups, sidebar widgets, footer).</li> <li><strong>Email Marketing Platform:</strong> Use a robust email marketing platform like <a href="https://mailchimp.com/" target="_blank" rel="noopener">Mailchimp</a> or <a href="https://www.klaviyo.com/" target="_blank" rel="noopener">Klaviyo</a> (especially for e-commerce).</li> <li><strong>Segmentation:</strong> Segment your list based on interests, purchase history, or engagement levels. Send targeted content and offers.</li> <li><strong>Value-Driven Content:</strong> Don’t just sell. Provide genuine value in your emails – tips, insights, exclusive content, behind-the-scenes looks. Aim for a healthy open rate (above 20%) and click-through rate (above 2%).</li> </ul> <p>It’s a foundational element. I often tell clients: if your website disappeared tomorrow, what would you have left? Your email list. Treat it like gold. Building enduring brand exposure demands a blend of strategic planning, consistent execution, and relentless data analysis. By meticulously following these steps, you’ll not only increase your visibility but also cultivate a loyal audience that drives sustainable growth. This is a core part of any <a href="https://brandexposurestudio.com/brand-exposure-studio-2026-strategy-over-viral-stunts/">2026 brand exposure strategy</a>.</p> <div class="faq-section"> <div class="faq-item"> <h3 class="faq-question">What is the difference between brand awareness and brand exposure?</h3> <div class="faq-answer"> <p><strong>Brand exposure</strong> refers to the act of getting your brand seen by as many relevant people as possible across various channels. <strong>Brand awareness</strong> is the outcome of consistent exposure, meaning how familiar and recognizable your brand is to your target audience, and how easily they can recall it when prompted.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">How often should I update my content strategy?</h3> <div class="faq-answer"> <p>You should formally review and potentially update your content strategy at least once a quarter (every 90 days) to account for algorithm changes, new industry trends, competitive shifts, and evolving audience preferences. Daily or weekly monitoring of analytics will inform these larger quarterly adjustments.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">Is it better to focus on organic or paid brand exposure?</h3> <div class="faq-answer"> <p>The most effective approach combines both. <strong>Organic exposure</strong> builds long-term authority and trust, providing sustainable traffic over time. <strong>Paid exposure</strong> offers immediate visibility, precise targeting, and valuable data for rapid testing and scaling. A balanced strategy typically yields the best results, with paid efforts often accelerating organic growth.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">How long does it take to see results from brand exposure efforts?</h3> <div class="faq-answer"> <p>Results vary significantly based on industry competitiveness, budget, and consistency. For organic SEO and content marketing, expect to see noticeable improvements in rankings and traffic within 3-6 months. Paid campaigns can generate immediate results, often within days or weeks, but sustained brand awareness takes consistent effort over several months to a year or more.</p> </div> </div> <div class="faq-item"> <h3 class="faq-question">What’s the most critical metric for measuring brand exposure?</h3> <div class="faq-answer"> <p>While no single metric tells the whole story, for brand exposure specifically, <strong>reach</strong> (the total number of unique users who saw your content) and <strong>impressions</strong> (the total number of times your content was displayed) are fundamental. However, always pair these with engagement metrics (clicks, likes, shares) and conversion rates to ensure your exposure is effective and not just superficial.</p> </div> </div> </div> </div> <div class="share-buttons"> <span class="share-label">Share:</span> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F" class="share-btn facebook" target="_blank" rel="noopener noreferrer" aria-label="Share on Facebook"> <svg width="18" height="18" 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> <span>Facebook</span> </a> <a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F&text=Brand+Exposure%3A+90-Day+Plan+for+2026+Success" class="share-btn twitter" target="_blank" rel="noopener noreferrer" aria-label="Share on Twitter"> <svg width="18" height="18" 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> <span>Twitter</span> </a> <a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F&media=https%3A%2F%2Fbrandexposurestudio.com%2Fwp-content%2Fuploads%2Fsites%2F31%2F2026%2F05%2Finfluencer-marketing-2026-roi-with-grin-upfluence-featured.webp&description=Brand+Exposure%3A+90-Day+Plan+for+2026+Success" class="share-btn pinterest" target="_blank" rel="noopener noreferrer" aria-label="Share on Pinterest"> <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.373 0 0 5.372 0 12c0 5.084 3.163 9.426 7.627 11.174-.105-.949-.2-2.405.042-3.441.218-.937 1.407-5.965 1.407-5.965s-.359-.719-.359-1.782c0-1.668.967-2.914 2.171-2.914 1.023 0 1.518.769 1.518 1.69 0 1.029-.655 2.568-.994 3.995-.283 1.194.599 2.169 1.777 2.169 2.133 0 3.772-2.249 3.772-5.495 0-2.873-2.064-4.882-5.012-4.882-3.414 0-5.418 2.561-5.418 5.207 0 1.031.397 2.138.893 2.738a.36.36 0 01.083.345l-.333 1.36c-.053.22-.174.267-.402.161-1.499-.698-2.436-2.889-2.436-4.649 0-3.785 2.75-7.262 7.929-7.262 4.163 0 7.398 2.967 7.398 6.931 0 4.136-2.607 7.464-6.227 7.464-1.216 0-2.359-.632-2.75-1.378l-.748 2.853c-.271 1.043-1.002 2.35-1.492 3.146C9.57 23.812 10.763 24 12 24c6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12z"/></svg> <span>Pinterest</span> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F&title=Brand+Exposure%3A+90-Day+Plan+for+2026+Success" class="share-btn linkedin" target="_blank" rel="noopener noreferrer" aria-label="Share on LinkedIn"> <svg width="18" height="18" 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> <span>LinkedIn</span> </a> <button class="share-btn copy-link" onclick="navigator.clipboard.writeText('https://brandexposurestudio.com/brand-exposure-90-day-plan-for-2026-success/').then(function(){this.querySelector('span').textContent='Copied!'}.bind(this))"> <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71"/><path d="M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><path d="M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg> <span>Copy Link</span> </button> </div> <div class="article-feedback" id="article-feedback"> <span class="feedback-question">Was this article helpful?</span> <button class="feedback-btn feedback-yes" data-vote="yes" aria-label="Yes"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 9V5a3 3 0 00-3-3l-4 9v11h11.28a2 2 0 002-1.7l1.38-9a2 2 0 00-2-2.3H14z"/><path d="M7 22H4a2 2 0 01-2-2v-7a2 2 0 012-2h3"/></svg> Yes </button> <button class="feedback-btn feedback-no" data-vote="no" aria-label="No"> <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M10 15v4a3 3 0 003 3l4-9V2H5.72a2 2 0 00-2 1.7l-1.38 9a2 2 0 002 2.3H10z"/><path d="M17 2h2.67A2.31 2.31 0 0122 4v7a2.31 2.31 0 01-2.33 2H17"/></svg> No </button> </div> <script> (function(){ var fb = document.getElementById('article-feedback'); if(!fb) return; fb.querySelectorAll('.feedback-btn').forEach(function(btn){ btn.addEventListener('click', function(){ var vote = this.dataset.vote; fetch('/wp-json/satellite/v1/feedback', { method:'POST', headers:{'Content-Type':'application/json'}, body:JSON.stringify({post_id:13566,vote:vote}) }); fb.innerHTML = '<span class="feedback-thanks">Thanks for your feedback!</span>'; }); }); })(); </script> <div class="author-bio"> <div class="author-bio-avatar"> <img fetchpriority="low" loading="lazy" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexplenapatel-headshot-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexplenapatel-headshot-150x150.png 2x' class='avatar avatar-72 photo' height='72' width='72' decoding='async'/> </div> <div class="author-bio-info"> <h4 class="author-bio-name"> <a href="https://brandexposurestudio.com/author/brandexplenapatel/"> Dennis Roach </a> </h4> <span class="author-bio-title">Senior Marketing Strategist</span> <span class="author-bio-credentials">MBA, Marketing Strategy; Google Ads Certified</span> <p class="author-bio-description">Dennis Roach is a Senior Marketing Strategist with over 15 years of experience crafting impactful growth strategies for leading brands. Currently at Zenith Innovations Group, she specializes in leveraging data-driven insights to build robust customer acquisition funnels. Previously, she spearheaded the successful digital transformation initiative for Horizon Consumer Goods, resulting in a 30% increase in online sales. Her work on 'The Future of Hyper-Personalization in E-commerce' was recently featured in the Journal of Marketing Analytics</p> <div class="author-bio-links"> <a href="https://skillshop.withgoogle.com/" target="_blank" rel="noopener noreferrer" class="author-link-badge"> Credentials </a> <span class="author-experience">15+ years experience</span> </div> </div> </div> </div> <aside class="single-post-sidebar"> <div class="sidebar-sticky"> <div class="sidebar-share"> <span class="sidebar-share-label">Share</span> <div class="sidebar-share-icons"> <a href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F" target="_blank" rel="noopener noreferrer" class="sidebar-share-icon facebook" aria-label="Facebook"> <svg width="16" height="16" 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 href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F&text=Brand+Exposure%3A+90-Day+Plan+for+2026+Success" target="_blank" rel="noopener noreferrer" class="sidebar-share-icon twitter" aria-label="Twitter"> <svg width="16" height="16" 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 href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F&description=Brand+Exposure%3A+90-Day+Plan+for+2026+Success" target="_blank" rel="noopener noreferrer" class="sidebar-share-icon pinterest" aria-label="Pinterest"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.373 0 0 5.372 0 12c0 5.084 3.163 9.426 7.627 11.174-.105-.949-.2-2.405.042-3.441.218-.937 1.407-5.965 1.407-5.965s-.359-.719-.359-1.782c0-1.668.967-2.914 2.171-2.914 1.023 0 1.518.769 1.518 1.69 0 1.029-.655 2.568-.994 3.995-.283 1.194.599 2.169 1.777 2.169 2.133 0 3.772-2.249 3.772-5.495 0-2.873-2.064-4.882-5.012-4.882-3.414 0-5.418 2.561-5.418 5.207 0 1.031.397 2.138.893 2.738a.36.36 0 01.083.345l-.333 1.36c-.053.22-.174.267-.402.161-1.499-.698-2.436-2.889-2.436-4.649 0-3.785 2.75-7.262 7.929-7.262 4.163 0 7.398 2.967 7.398 6.931 0 4.136-2.607 7.464-6.227 7.464-1.216 0-2.359-.632-2.75-1.378l-.748 2.853c-.271 1.043-1.002 2.35-1.492 3.146C9.57 23.812 10.763 24 12 24c6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12z"/></svg> </a> <a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fbrandexposurestudio.com%2Fbrand-exposure-90-day-plan-for-2026-success%2F&title=Brand+Exposure%3A+90-Day+Plan+for+2026+Success" target="_blank" rel="noopener noreferrer" class="sidebar-share-icon linkedin" aria-label="LinkedIn"> <svg width="16" height="16" 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> <div class="sidebar-top-posts"> <h3 class="sidebar-section-title">Top Posts</h3> <a href="https://brandexposurestudio.com/2026-social-media-strategies-for-emerging-platforms/" class="sidebar-post-card"> <div class="sidebar-post-thumb"> <img width="300" height="200" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-300x200.webp?v=1773736497" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-300x200.webp?v=1773736497 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-600x400.webp?v=1773736497 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </div> <div class="sidebar-post-info"> <h4 class="sidebar-post-title">2026 Social Media: Strategies for Emerging Platforms</h4> <div class="sidebar-post-meta"> <time datetime="2026-03-17T08:34:57+00:00">17/03/2026</time> <span class="sidebar-post-views">218 Views</span> </div> </div> </a> <a href="https://brandexposurestudio.com/influencer-collabs-content-that-converts-in-2026/" class="sidebar-post-card"> <div class="sidebar-post-thumb"> <img width="300" height="200" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-300x200.webp?v=1773933480" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-300x200.webp?v=1773933480 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-600x400.webp?v=1773933480 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </div> <div class="sidebar-post-info"> <h4 class="sidebar-post-title">Influencer Collabs: Content That Converts in 2026</h4> <div class="sidebar-post-meta"> <time datetime="2026-03-19T15:18:01+00:00">19/03/2026</time> <span class="sidebar-post-views">195 Views</span> </div> </div> </a> <a href="https://brandexposurestudio.com/influencer-collabs-case-studies-marketing-in-2026/" class="sidebar-post-card"> <div class="sidebar-post-thumb"> <img width="300" height="200" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-case-studies-marketing-in-2026-featured-300x200.webp?v=1774178808" class="attachment-satellite-thumb size-satellite-thumb wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-case-studies-marketing-in-2026-featured-300x200.webp?v=1774178808 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-case-studies-marketing-in-2026-featured-600x400.webp?v=1774178808 600w" sizes="auto, (max-width: 300px) 100vw, 300px" /> </div> <div class="sidebar-post-info"> <h4 class="sidebar-post-title">Influencer Collabs: Case Studies & Marketing in 2026</h4> <div class="sidebar-post-meta"> <time datetime="2026-03-22T11:26:48+00:00">22/03/2026</time> <span class="sidebar-post-views">186 Views</span> </div> </div> </a> </div> </div> </aside> </div> <nav class="post-navigation"> <a href="https://brandexposurestudio.com/coastal-comfort-marketing-results-in-2026/" class="post-nav-link prev"> <div class="post-nav-label">« Previous</div> <div class="post-nav-title">Coastal Comfort: Marketing Results in 2026</div> </a> <a href="https://brandexposurestudio.com/accessible-marketing-95-wcag-2-2-compliance-by-2028/" class="post-nav-link next"> <div class="post-nav-label">Next »</div> <div class="post-nav-title">Accessible Marketing: 95% WCAG 2.2 Compliance by 2028</div> </a> </nav> </article> <section class="related-posts"> <div class="section-header"> <h2 class="section-title">Related Articles</h2> <div class="carousel-nav"> <button class="carousel-btn carousel-prev" aria-label="Previous">‹</button> <button class="carousel-btn carousel-next" aria-label="Next">›</button> </div> </div> <div class="related-carousel" id="related-carousel"> <div class="carousel-track"> <article class="article-card"> <a href="https://brandexposurestudio.com/entrepreneurs-reshape-marketing-4-key-tactics-for-2026/" class="article-card-image" aria-label="Entrepreneurs Reshape Marketing: 4 Key Tactics for 2026"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/entrepreneurs-reshape-marketing-4-key-tactics-for-2026-featured-768x419.webp?v=1783506776" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/entrepreneurs-reshape-marketing-4-key-tactics-for-2026-featured-768x419.webp 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/entrepreneurs-reshape-marketing-4-key-tactics-for-2026-featured-300x164.webp 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/entrepreneurs-reshape-marketing-4-key-tactics-for-2026-featured-1024x559.webp 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/entrepreneurs-reshape-marketing-4-key-tactics-for-2026-featured.webp 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/marketing-strategy/" class="article-card-category" style="color:#9a3412"> Marketing Strategy </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/entrepreneurs-reshape-marketing-4-key-tactics-for-2026/">Entrepreneurs Reshape Marketing: 4 Key Tactics for 2026</a> </h3> <p class="article-card-excerpt">Listen to this article · 14 min listen1.0xAudio playback not supported in this browser.The marketing industry, once dominated by large agencies and hefty budgets, is undergoing a…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpalicesmith-headshot-1-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpalicesmith-headshot-1-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Anna Torres</span> <span class="dot">·</span> <time datetime="2026-07-08T09:07:49+00:00">08/07/2026</time> <span class="dot">·</span> <span>11 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/terrafootwear-2026-narrative-drives-3-2-conversion/" class="article-card-image" aria-label="TerraFootwear: 2026 Narrative Drives 3.2% Conversion"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/terrafootwear-2026-narrative-drives-3-2-conversion-featured-768x419.webp?v=1783506825" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/terrafootwear-2026-narrative-drives-3-2-conversion-featured-768x419.webp 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/terrafootwear-2026-narrative-drives-3-2-conversion-featured-300x164.webp 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/terrafootwear-2026-narrative-drives-3-2-conversion-featured-1024x559.webp 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/terrafootwear-2026-narrative-drives-3-2-conversion-featured.webp 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/marketing-strategy/" class="article-card-category" style="color:#9a3412"> Marketing Strategy </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/terrafootwear-2026-narrative-drives-3-2-conversion/">TerraFootwear: 2026 Narrative Drives 3.2% Conversion</a> </h3> <p class="article-card-excerpt">Listen to this article · 10 min listen1.0xAudio playback not supported in this browser.Crafting compelling brand narratives isn’t just about pretty words; it’s about connecting with your…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexpmarcusthurgood-headshot-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexpmarcusthurgood-headshot-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Dennis Porter</span> <span class="dot">·</span> <time datetime="2026-07-08T08:10:37+00:00">08/07/2026</time> <span class="dot">·</span> <span>8 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/2026-social-media-strategies-for-emerging-platforms/" class="article-card-image" aria-label="2026 Social Media: Strategies for Emerging Platforms"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-768x419.webp?v=1773736497" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-768x419.webp?v=1773736497 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-300x164.webp?v=1773736497 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured-1024x559.webp?v=1773736497 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/2026-social-media-strategies-for-emerging-platforms-featured.webp?v=1773736497 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/campaign-insights/" class="article-card-category" style="color:#1d4ed8"> Campaign Insights </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/2026-social-media-strategies-for-emerging-platforms/">2026 Social Media: Strategies for Emerging Platforms</a> </h3> <p class="article-card-excerpt">Listen to this article · 10 min listen1.0xAudio playback not supported in this browser.Unlocking Growth: Social Media Strategies for Emerging Platforms Are you ready to move beyond…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpjohnsmith-headshot-2-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpjohnsmith-headshot-2-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Andrew Berry</span> <span class="dot">·</span> <time datetime="2026-03-17T08:34:57+00:00">17/03/2026</time> <span class="dot">·</span> <span>8 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/influencer-collabs-content-that-converts-in-2026/" class="article-card-image" aria-label="Influencer Collabs: Content That Converts in 2026"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-768x419.webp?v=1773933480" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-768x419.webp?v=1773933480 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-300x164.webp?v=1773933480 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured-1024x559.webp?v=1773933480 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/influencer-collabs-content-that-converts-in-2026-featured.webp?v=1773933480 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/customer-engagement/" class="article-card-category" style="color:#b13a1d"> Customer Engagement </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/influencer-collabs-content-that-converts-in-2026/">Influencer Collabs: Content That Converts in 2026</a> </h3> <p class="article-card-excerpt">Listen to this article · 8 min listen1.0xAudio playback not supported in this browser.A Beginner’s Guide to and Influencer Collaborations: Content Formats for Marketing Success Are you…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpjohnsmith-headshot-2-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpjohnsmith-headshot-2-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Andrew Berry</span> <span class="dot">·</span> <time datetime="2026-03-19T15:18:01+00:00">19/03/2026</time> <span class="dot">·</span> <span>6 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/brand-exposure-studio-2026-strategy-over-viral-stunts/" class="article-card-image" aria-label="Brand Exposure Studio: 2026 Strategy Over Viral Stunts"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/brand-exposure-studio-2026-strategy-over-viral-stunts-featured-768x419.webp?v=1783496026" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/brand-exposure-studio-2026-strategy-over-viral-stunts-featured-768x419.webp 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/brand-exposure-studio-2026-strategy-over-viral-stunts-featured-300x164.webp 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/brand-exposure-studio-2026-strategy-over-viral-stunts-featured-1024x559.webp 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/07/brand-exposure-studio-2026-strategy-over-viral-stunts-featured.webp 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/marketing-strategy/" class="article-card-category" style="color:#9a3412"> Marketing Strategy </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/brand-exposure-studio-2026-strategy-over-viral-stunts/">Brand Exposure Studio: 2026 Strategy Over Viral Stunts</a> </h3> <p class="article-card-excerpt">Listen to this article · 9 min listen1.0xAudio playback not supported in this browser.So much misinformation circulates about effective brand building, it’s frankly astonishing. Many businesses, from…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexpmayachandra-headshot-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexpmayachandra-headshot-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Maya Chandra</span> <span class="dot">·</span> <time datetime="2026-07-08T07:05:41+00:00">08/07/2026</time> <span class="dot">·</span> <span>7 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/entrepreneur-marketing-2026-trends-reshaping-industry/" class="article-card-image" aria-label="Entrepreneur Marketing: 2026 Trends Reshaping Industry"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/startup-marketing-5-steps-to-grow-in-2026-featured-768x419.webp?v=1779343458" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/startup-marketing-5-steps-to-grow-in-2026-featured-768x419.webp 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/startup-marketing-5-steps-to-grow-in-2026-featured-300x164.webp 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/startup-marketing-5-steps-to-grow-in-2026-featured-1024x559.webp 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/startup-marketing-5-steps-to-grow-in-2026-featured.webp 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/marketing-strategy/" class="article-card-category" style="color:#9a3412"> Marketing Strategy </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/entrepreneur-marketing-2026-trends-reshaping-industry/">Entrepreneur Marketing: 2026 Trends Reshaping Industry</a> </h3> <p class="article-card-excerpt">Listen to this article · 9 min listen1.0xAudio playback not supported in this browser.There is an astonishing amount of misinformation circulating about how entrepreneurs are fundamentally reshaping…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexplenapatel-headshot-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexplenapatel-headshot-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Dennis Roach</span> <span class="dot">·</span> <time datetime="2026-07-08T06:32:53+00:00">08/07/2026</time> <span class="dot">·</span> <span>7 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/seo-in-2026-can-local-brands-survive-ai/" class="article-card-image" aria-label="SEO in 2026: Can Local Brands Survive AI?"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/seo-in-2026-future-proof-your-marketing-now-featured-1-768x419.webp?v=1776447429" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/seo-in-2026-future-proof-your-marketing-now-featured-1-768x419.webp?v=1776447429 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/seo-in-2026-future-proof-your-marketing-now-featured-1-300x164.webp?v=1776447429 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/seo-in-2026-future-proof-your-marketing-now-featured-1-1024x559.webp?v=1776447429 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/seo-in-2026-future-proof-your-marketing-now-featured-1.webp?v=1776447429 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/content-marketing/" class="article-card-category" style="color:#0369a1"> Content Marketing </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/seo-in-2026-can-local-brands-survive-ai/">SEO in 2026: Can Local Brands Survive AI?</a> </h3> <p class="article-card-excerpt">Listen to this article · 8 min listen1.0xAudio playback not supported in this browser.The pressure was mounting. Maria, head of marketing for “Sweet Stack Creamery,” a local…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpjanedoe-headshot-2-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/03/brandexpjanedoe-headshot-2-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Amanda Dudley</span> <span class="dot">·</span> <time datetime="2026-04-16T21:23:50+00:00">16/04/2026</time> <span class="dot">·</span> <span>7 min read</span> </div> </div> </article> <article class="article-card"> <a href="https://brandexposurestudio.com/marketing-tone-10-ctr-boost-in-2026/" class="article-card-image" aria-label="Marketing Tone: 10% CTR Boost in 2026"> <img width="768" height="419" src="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/marketing-tone-10-ctr-boost-in-2026-featured-768x419.webp?v=1779794368" class="attachment-medium_large size-medium_large wp-post-image" alt="" loading="lazy" decoding="async" srcset="https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/marketing-tone-10-ctr-boost-in-2026-featured-768x419.webp 768w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/marketing-tone-10-ctr-boost-in-2026-featured-300x164.webp 300w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/marketing-tone-10-ctr-boost-in-2026-featured-1024x559.webp 1024w, https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/05/marketing-tone-10-ctr-boost-in-2026-featured.webp 1408w" sizes="auto, (max-width: 768px) 100vw, 768px" /> </a> <div class="article-card-body"> <a href="https://brandexposurestudio.com/category/marketing-strategy/" class="article-card-category" style="color:#9a3412"> Marketing Strategy </a> <h3 class="article-card-title"> <a href="https://brandexposurestudio.com/marketing-tone-10-ctr-boost-in-2026/">Marketing Tone: 10% CTR Boost in 2026</a> </h3> <p class="article-card-excerpt">Listen to this article · 12 min listen1.0xAudio playback not supported in this browser.Achieving a professional and results-oriented tone in marketing isn’t just about sounding good; it’s…</p> <div class="article-card-meta"> <img fetchpriority="low" alt='' src='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexpmarcusthurgood-headshot-150x150.png' srcset='https://brandexposurestudio.com/wp-content/uploads/sites/31/2026/04/brandexpmarcusthurgood-headshot-150x150.png 2x' class='avatar avatar-22 photo' height='22' width='22' loading='lazy' decoding='async'/> <span class="author-name">Dennis Porter</span> <span class="dot">·</span> <time datetime="2026-05-25T20:01:57+00:00">25/05/2026</time> <span class="dot">·</span> <span>9 min read</span> </div> </div> </article> </div> </div> </section> <script> (function(){ var track = document.querySelector('.carousel-track'); if(!track) return; var prev = document.querySelector('.carousel-prev'); var next = document.querySelector('.carousel-next'); var cardW = track.querySelector('.article-card'); if(!cardW) return; var scrollAmt = cardW.offsetWidth + 24; if(prev) prev.addEventListener('click', function(){ track.scrollBy({left:-scrollAmt,behavior:'smooth'}); }); if(next) next.addEventListener('click', function(){ track.scrollBy({left:scrollAmt,behavior:'smooth'}); }); })(); </script> </main> </div> <div class="read-next-bar" id="read-next-bar"> <div class="read-next-inner"> <span class="read-next-label">Read Next</span> <a href="https://brandexposurestudio.com/brand-storytelling-70-of-decisions-in-2026/" class="read-next-link"> Brand Storytelling: 70% of Decisions in 2026 </a> <a href="https://brandexposurestudio.com/brand-storytelling-70-of-decisions-in-2026/" class="read-next-cta" style="background:#9a3412"> → </a> </div> </div> <script> (function(){ var bar = document.getElementById('read-next-bar'); if(!bar) return; var shown = false; window.addEventListener('scroll', function(){ var doc = document.documentElement; var pct = (doc.scrollTop / (doc.scrollHeight - doc.clientHeight)) * 100; if (pct > 65 && !shown) { bar.classList.add('visible'); shown = true; } }, {passive:true}); bar.addEventListener('click', function(e){ if(e.target.classList.contains('read-next-close')) { bar.classList.remove('visible'); } }); })(); </script> </div><!-- .container --> <footer class="site-footer" role="contentinfo"> <div class="footer-main"> <div class="footer-col footer-about"> <div class="widget"> <h3 class="widget-title">Brand Exposure Studio</h3> <p>Expert insights, guides, and stories about marketing</p> </div> </div> <div class="footer-col"> <div class="widget"> <h3 class="widget-title">Categories</h3> <ul> <li class="cat-item cat-item-25"><a href="https://brandexposurestudio.com/category/campaign-insights/">Campaign Insights</a> </li> <li class="cat-item cat-item-20"><a href="https://brandexposurestudio.com/category/content-marketing/">Content Marketing</a> </li> <li class="cat-item cat-item-24"><a href="https://brandexposurestudio.com/category/customer-engagement/">Customer Engagement</a> </li> <li class="cat-item cat-item-19"><a href="https://brandexposurestudio.com/category/digital-marketing/">Digital Marketing</a> </li> <li class="cat-item cat-item-18"><a href="https://brandexposurestudio.com/category/marketing-strategy/">Marketing Strategy</a> </li> <li class="cat-item cat-item-23"><a href="https://brandexposurestudio.com/category/marketing-tech/">Marketing Tech</a> </li> <li class="cat-item cat-item-22"><a href="https://brandexposurestudio.com/category/seo-analytics/">SEO & Analytics</a> </li> <li class="cat-item cat-item-21"><a href="https://brandexposurestudio.com/category/social-media/">Social Media</a> </li> </ul> </div> </div> <div class="footer-col"> <div class="widget"> <h3 class="widget-title">Quick Links</h3> <ul> <li><a href="https://brandexposurestudio.com/">Home</a></li> <li><a href="https://brandexposurestudio.com/editorial-standards/">Editorial Standards</a></li> <li><a href="https://brandexposurestudio.com/about/">About</a></li> <li><a href="https://brandexposurestudio.com/contact/">Contact</a></li> <li><a href="https://brandexposurestudio.com/privacy-policy/">Privacy Policy</a></li> <li><a href="https://brandexposurestudio.com/terms-of-service/">Terms of Service</a></li> </ul> </div> </div> <div class="footer-col footer-col-authors"> <div class="widget"> <h3 class="widget-title">Our Authors</h3> <ul class="footer-authors-list" style="columns: 2; -webkit-columns: 2; -moz-columns: 2; column-gap: 1.5rem; padding-left: 0; list-style: none; margin: 0;"> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpalicesmith/">Anna Torres</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpkainguyen/">Dennis Heath</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpkeikochen/">Keiko Chen</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjamilaowens/">Debra Johnson</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpmayachandra/">Maya Chandra</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpbriarsantiago/">Derek York</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpmateocruz/">Denise Johnson</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpkeishadixon/">Derrick Copeland</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjenniferpark/">Jennifer Park</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjohnsmith/">Andrew Berry</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjamalonyeka/">Dennis Jones</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjennifersanders/">Jennifer Sanders</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpsarahbrown/">Anne Bryan</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpmariagarcia/">Amanda Griffin</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexplenapatel/">Dennis Roach</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexprohanpatel/">Debra Reynolds</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjennifermyers/">Jennifer Myers</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjaviervaldez/">Debra Hall</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpseraphinaokoro/">Derek Murray</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpmarcusthurgood/">Dennis Porter</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpmarcuschung/">Denise Andrade</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpzaraadebayo/">Derek Moore</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpkianmercado/">Kian Mercado</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpanyasharma/">Debra Thomas</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpkeishamontgomery/">Debra Patterson</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjavierchen/">Derrick Cook</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpjenniferprince/">Jennifer Prince</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpkevinlee/">Anne Anderson</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexpdevonchambers/">Derek Myers</a></li> <li style="break-inside: avoid; -webkit-column-break-inside: avoid; page-break-inside: avoid; padding: 2px 0;"><a href="https://brandexposurestudio.com/author/brandexplenakim/">Denise Gonzalez</a></li> </ul> </div> </div> </div> <div class="footer-bottom"> <div class="footer-bottom-inner"> <div class="footer-copyright"> © 2026 Brand Exposure Studio. All rights reserved. </div> <nav class="footer-nav" role="navigation"> </nav> </div> </div> </footer> <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/31/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/satellite-theme/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} </script> <script id="satellite-main-js-extra"> var satelliteAjax = {"ajaxurl":"https://brandexposurestudio.com/wp-admin/admin-ajax.php","nonce":"38767614ae"}; //# sourceURL=satellite-main-js-extra </script> <script src="https://brandexposurestudio.com/wp-content/themes/satellite-theme/assets/js/main.js?ver=4.10.1" id="satellite-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="brandexposurestudio.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=brandexposurestudio.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 = "brandexposurestudio.com"; var AEO_VARIANT = "small-report"; var AEO_NICHE = "marketing"; var AEO_EVENT_URL = "https:\/\/brandexposurestudio.com\/wp-json\/satellite\/v1\/lead-event"; var AEO_EVENT_NONCE = "ce8b0c1155"; /* 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:\/\/brandexposurestudio.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/gemini.svg"},{"name":"Grok","bg":"#111111","logo":"https:\/\/brandexposurestudio.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/grok.svg"},{"name":"Perplexity","bg":"#1FB8CD","logo":"https:\/\/brandexposurestudio.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/perplexity.svg"},{"name":"ChatGPT","bg":"#10A37F","logo":"https:\/\/brandexposurestudio.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/chatgpt.svg"},{"name":"Copilot","bg":"#FFFFFF","logo":"https:\/\/brandexposurestudio.com\/wp-content\/mu-plugins\/aeo-assets\/logos\/copilot.svg"},{"name":"Claude","bg":"#D97757","logo":"https:\/\/brandexposurestudio.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, scroll_reached: Math.max.apply(null, Object.keys(milestones).filter(function(k){return milestones[k];})) || 0}); } 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) { 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>