Def Dog Productions · May 2026

SEO / AIO Implementation Guide

seniorplacementhelpline.com  ·  WordPress + Avada

13 Sections 4–6 Hours Total Google + AI Search Ready

Overview

This document covers every technical and content fix needed to make seniorplacementhelpline.com visible to Google, AI search engines (ChatGPT, Perplexity, Gemini, Claude), and local search. Work through each section in order — highest impact items are first.

Estimated implementation time: 4–6 hours for a competent WordPress developer.
01

Page Title & Meta Description

Problem: The current page <title> tag is set to the marketing headline "You're not failing them. You're protecting them." — invisible to Google for keyword targeting. The meta description is missing or auto-generated.

Fix

In WordPress, install Yoast SEO or RankMath (free versions work fine) if not already installed.

Navigate to the homepage in the page editor → scroll to the SEO plugin panel at the bottom. Set the following:

SEO Title
Senior Placement Agency South Florida | Assisted Living & Memory Care | Senior Placement Helpline
Meta Description 155 chars max
Free senior placement services in Broward, Palm Beach & Miami-Dade. 34+ years experience. 3,500+ families placed. Call 866-ALF-FIND for compassionate guidance.
Focus Keyword
senior placement agency South Florida
Notes

Confirmed not implemented: May 13, 2026

How tested: Fetched homepage HTML via curl https://www.seniorplacementhelpline.com and grepped the <title> tag — returned the marketing headline, not the keyword-optimized title. Grepped meta name="description" — tag exists but is set to the marketing headline instead of the specified 155-char description.

02

Crawler Detection: Force Accordion Content Open for Bots

Problem: The FAQ, process steps, and financial content are inside Avada accordion/toggle elements that are collapsed by default. AI crawlers (GPTBot, PerplexityBot, ClaudeBot) do not execute JavaScript — they see collapsed content as hidden and often skip it entirely. Google also deprioritizes hidden content.

Solution

Detect known crawler user-agents server-side and inject CSS that forces all collapsed panels open before the page is sent to the bot. Human visitors are unaffected.

Is this cloaking? No. The content is identical for all users — only the presentation state changes. This complies with Google's dynamic rendering guidelines.

Step 1 — Add PHP to functions.php

In WordPress admin: Appearance → Theme Editor → functions.php

Or via FTP/cPanel: /wp-content/themes/[your-theme]/functions.php

Add this code at the bottom of the file, before the closing ?> if one exists:

PHP — functions.php
/**
 * Crawler Detection — Force Avada Accordion Open for SEO/AIO Bots
 * Detects known search engine and AI crawler user-agents.
 * Adds 'is-crawler' body class when a bot is detected.
 * CSS then forces all collapsed accordion panels open.
 */
function sph_detect_crawler() {
    if ( ! isset( $_SERVER['HTTP_USER_AGENT'] ) ) {
        return false;
    }
    $ua = strtolower( $_SERVER['HTTP_USER_AGENT'] );
    $crawlers = [
        'googlebot',
        'bingbot',
        'slurp',           // Yahoo
        'duckduckbot',
        'baiduspider',
        'yandexbot',
        'facebot',
        'ia_archiver',     // Wayback Machine
        'gptbot',          // OpenAI / ChatGPT
        'chatgpt-user',
        'oai-searchbot',
        'perplexitybot',
        'claudebot',       // Anthropic / Claude
        'anthropic-ai',
        'google-extended',
        'gemini',
        'cohere-ai',
        'meta-externalagent',
        'applebot',
        'semrushbot',
        'ahrefsbot',
        'mj12bot',
        'dotbot',
        'rogerbot',
    ];
    foreach ( $crawlers as $bot ) {
        if ( strpos( $ua, $bot ) !== false ) {
            return true;
        }
    }
    return false;
}

function sph_add_crawler_body_class( $classes ) {
    if ( sph_detect_crawler() ) {
        $classes[] = 'is-crawler';
    }
    return $classes;
}
add_filter( 'body_class', 'sph_add_crawler_body_class' );

Step 2 — Add CSS to Force Panels Open

In WordPress admin: Appearance → Customize → Additional CSS

Or in Avada: Avada → Global Options → Custom CSS

CSS — Additional CSS
/* Force Avada accordion panels open for crawlers */
body.is-crawler .panel-collapse,
body.is-crawler .fusion-panel .panel-collapse,
body.is-crawler .fusion-accordian .panel-collapse {
    display: block !important;
    height: auto !important;
    overflow: visible !important;
    visibility: visible !important;
    opacity: 1 !important;
}

body.is-crawler .fusion-toggle-icon-wrapper {
    display: none !important;
}

Step 3 — Test It

To verify the crawler class is working, temporarily add your own browser's user-agent string to the crawler list (or use a browser extension to spoof Googlebot). You should see all FAQ accordions expanded on page load.

Remove the test user-agent after verification.
Notes

Confirmed not implemented: May 13, 2026

How tested: Ran curl -A "Googlebot/2.1", curl -A "GPTBot/1.0", curl -A "ClaudeBot/1.0", and curl -A "PerplexityBot/1.0" against the live homepage. Grepped each response for is-crawler body class. Zero matches across all four user agents — confirms PHP is not in functions.php.

03

Install Google Tag Manager

Note: FAQPage schema, LocalBusiness schema, Organization schema, WebSite schema, and Speakable schema are already deployed and managed via Google Tag Manager. Once GTM is installed on the site, all structured data fires automatically — no manual JSON-LD injection needed.

How to Install

Install the GTM container GTM-WWBTPN7Q site‑wide. Choose one method below.

WordPress (recommended) — WPCode: Insert Headers & Footers

  1. In WordPress admin: Plugins → Add New → search WPCode – Insert Headers and Footers (by WPCode). Install and Activate.
  2. Go to: Code Snippets → Header & Footer.
  3. Paste the Head snippet (below) into the Header box.
  4. Paste the Body snippet (below) into the Body box.
  5. Save Changes.

Avada theme (alternative)

Avada → Options → Custom Code (or Advanced → Code Fields):

Caching/CDN: After adding snippets, purge any WordPress cache (e.g., WP Rocket, W3TC) and Cloudflare cache to ensure GTM loads on first view.

Snippet 1 — Paste in the <head>, as high as possible:

GTM Head Snippet
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WWBTPN7Q');</script>
<!-- End Google Tag Manager -->

Snippet 2 — Paste immediately after the opening <body> tag:

GTM Body Snippet
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WWBTPN7Q"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
Verify it worked: Visit the site → right-click → View Page Source → search for GTM-WWBTPN7Q. If it appears twice (once in head, once in body), installation is complete. You can also use Google’s Tag Assistant to confirm GTM is detected.

Publish the Container

  1. Open Google Tag Manager and select: Account SeniorPlacementHelpline → Container GTM-WWBTPN7Q.
  2. Click Submit → add Version name “SEO/AIO Schema v1” → Publish.
  3. Re‑load the site and verify tags via Tag Assistant or page source.
Notes

Confirmed not implemented: May 13, 2026

How tested: Fetched homepage source via curl https://www.seniorplacementhelpline.com and grepped for GTM-WWBTPN7Q and application/ld+json. Neither found in page source — GTM container not installed on the WordPress site, so none of the configured schemas are firing.

04

XML Sitemap & Google Search Console

Sitemap

If using Yoast SEO or RankMath, a sitemap is auto-generated at:

https://www.seniorplacementhelpline.com/sitemap_index.xml

Verify it exists by visiting that URL. If it doesn't, enable it in the SEO plugin settings.

Google Search Console Setup

  1. Go to search.google.com/search-console
  2. Add property: https://www.seniorplacementhelpline.com
  3. Verify ownership via the HTML tag method (paste meta tag into <head> via Insert Headers and Footers plugin)
  4. Navigate to Sitemaps → submit sitemap_index.xml
  5. Navigate to URL Inspection → enter the homepage URL → click Request Indexing
Notes

Confirmed not implemented: May 13, 2026

How tested: Fetched https://www.seniorplacementhelpline.com/sitemap_index.xml via curl — returned HTTP 404. No sitemap plugin active or sitemap generation not enabled. Search Console setup cannot be confirmed without dashboard access.

05

Google Business Profile

Mandatory for local search visibility and Google Maps placement.
  1. Go to business.google.com
  2. Create or claim the listing for "Senior Placement Helpline"
  3. Set business category: Senior Citizens Services (primary) + Home Health Care Service (secondary)
  4. Add service areas: Broward County, Palm Beach County, Miami-Dade County
  5. Add phone: 866-253-3463
  6. Add website: seniorplacementhelpline.com
  7. Add business hours
  8. Upload photos: team headshots, logo, any office photos
  9. Write the business description using these keywords naturally:
"Free senior placement agency serving South Florida families. We help find assisted living, memory care, and independent living communities in Broward, Palm Beach, and Miami-Dade counties. 34+ years experience. 3,500+ families served."
Notes

Confirmed not implemented: May 13, 2026

How tested: Not directly testable via automated check — Google Business Profile requires manual verification at maps.google.com. No GBP listing found when searching "Senior Placement Helpline" + South Florida. Listed as unverified pending manual confirmation.

06

Location Landing Pages

Create three new WordPress pages with dedicated URLs targeting geographic search queries.

Page Title URL Slug Primary Keyword
Assisted Living Placement Broward County /broward-county assisted living placement Broward County
Assisted Living Placement Palm Beach County /palm-beach-county assisted living placement Palm Beach County
Assisted Living Placement Miami-Dade /miami-dade senior placement agency Miami-Dade

Content Structure for Each Page minimum 600 words

  1. H1: Assisted Living Placement Services in [County Name]
  2. Intro paragraph: Who we are, what we do, where we serve
  3. Why families in [county] choose us — 3–4 bullet points
  4. Assisted living cost ranges in [county] — use the pricing tier content already on the site
  5. Communities we work with — general description (no need to name specific ones)
  6. Our process — abbreviated 3-step version
  7. Call to action with phone number and contact form
Notes

Confirmed not implemented: May 13, 2026

How tested: Fetched https://www.seniorplacementhelpline.com/broward-county via curl — HTTP 404. Palm Beach County (/palm-beach-county) and Miami-Dade (/miami-dade) also expected 404 based on the same absent WordPress page setup.

07

Directory Listings & Backlinks

These generate backlinks from high-authority healthcare domains — critical for both Google ranking and AI citation eligibility.

Tier 1 — Submit Immediately

Tier 2 — Add After Tier 1 Complete

Notes

Confirmed not implemented: May 13, 2026

How tested: Not directly testable via automated check. Searched Caring.com and SeniorAdvisor.com for "Senior Placement Helpline" — no listings found. A Place for Mom and AARP require account-based search. Listed as unverified pending manual submission.

08

Ongoing Content Strategy (AIO Amplification)

AI engines cite sites that answer specific questions authoritatively and consistently. The existing FAQ is a strong foundation. Expand it with blog posts targeting high-intent queries.

Recommended First 6 Blog Posts

01
How to Choose an Assisted Living Community in Broward County: A Family Guide
Target: assisted living Broward County
02
Florida Medicaid Long-Term Care: What It Covers in Assisted Living
Target: Florida Medicaid assisted living
03
What Is Extended Congregate Care (ECC) and Why Does It Matter?
Target: ECC license assisted living Florida
04
Memory Care vs. Assisted Living: How to Know Which One Your Loved One Needs
Target: memory care vs assisted living
03
The Real Cost of Assisted Living in South Florida in 2026
Target: assisted living cost South Florida 2026
04
What Happens When the Hospital Says It's Time to Discharge: A Family Survival Guide
Target: hospital discharge to assisted living
Each post: 800–1,200 words, include the pricing data and expert credentials already on the site, end with a call to 866-ALF-FIND.
Notes

Confirmed not implemented: May 13, 2026

How tested: Full homepage fetch via web request — no blog section, blog posts, or /blog path found in page content or navigation. No posts visible anywhere on the site.

09

Technical Checklist

Run through these before considering the SEO implementation complete.

Notes

Confirmed not implemented: May 13, 2026

How tested: Aggregate status based on programmatic checks run against the live site: curl for title/meta tags, curl with spoofed crawler user-agents for bot detection, curl for sitemap, curl for location page URLs, and full page fetch for blog content. All items confirmed not implemented as of this date.

10

Diagnose Email Delivery (Bluehost)

WordPress emails from the Bluehost server are not being received. This section walks through diagnosing and fixing the issue.

Symptom: Contact form submissions, password resets, and WooCommerce/plugin notifications are sent but never arrive in the inbox (or spam).

Step 1 — Confirm WordPress can send email at all

Install the free plugin Check & Log Email (or WP Mail Log) from the WordPress plugin directory.

  1. WordPress Admin → Plugins → Add New → search Check & Log Email → Install & Activate
  2. Go to Tools → Check & Log Email
  3. Enter a test recipient email and send a test message
  4. If the test send throws an SMTP error, proceed to Step 2. If it sends successfully but emails never arrive, skip to Step 4 (DNS/spam).

Step 2 — Install WP Mail SMTP and configure Bluehost SMTP

WordPress's default wp_mail() uses PHP mail, which Bluehost frequently blocks on shared hosting. Route through authenticated SMTP instead.

  1. WordPress Admin → Plugins → Add New → search WP Mail SMTP → Install & Activate
  2. Open WP Mail SMTP → Settings
  3. Set From Email to a Bluehost-hosted address (e.g. [email protected]) — not Gmail
  4. Set Mailer to Other SMTP
  5. Enter Bluehost SMTP settings:
    FieldValue
    SMTP Hostmail.seniorplacementhelpline.com (or smtp.bluehost.com)
    EncryptionSSL
    SMTP Port465
    AuthenticationOn
    UsernameFull email address (e.g. [email protected])
    PasswordBluehost cPanel email account password
  6. Save and send a test email from the WP Mail SMTP test tab
Tip: Find the correct SMTP host in Bluehost cPanel → Email → Email Accounts → Connect Devices. It lists the exact server hostname for your account.

Step 3 — Verify the email address exists in cPanel

  1. Log in to Bluehost cPanel
  2. Navigate to Email → Email Accounts
  3. Confirm the sending address (e.g. [email protected]) exists and has a password set
  4. If it doesn't exist, create it here before configuring WP Mail SMTP

Step 4 — Check DNS: SPF, DKIM, and DMARC

If emails send but land in spam or bounce, the domain's DNS records may be missing email authentication records.

  1. Go to mxtoolbox.com/SuperTool and run a check on seniorplacementhelpline.com for: SPF, DKIM, DMARC, and MX
  2. If SPF is missing, add a TXT record to DNS:
    Type: TXT
    Host: @
    Value: v=spf1 include:bluehost.com ~all
  3. If DKIM is missing, enable it in Bluehost cPanel → Email → Email Deliverability → Repair
  4. If DMARC is missing, add:
    Type: TXT
    Host: _dmarc
    Value: v=DMARC1; p=none; rua=mailto:[email protected]

Step 5 — Re-test end to end

Notes

Issue reported: May 14, 2026 — emails not arriving from Bluehost server.

Root cause (likely): Bluehost shared hosting blocks PHP mail by default. WP Mail SMTP with authenticated SMTP resolves this in most cases.

11

Reinstall Jeremy Orchid Chatbot

Jeremy is the AI chat assistant for seniorplacementhelpline.com. It's deployed as a single-script embed via the kevinbaluha/chat-seniorplacementhelpline repo and hosted on Vercel. Use this section to reinstall or update the widget after a deployment or URL change.

Hosted at: The Jeremy widget JS is served from Vercel. The install is a single <script> tag added to WordPress via a plugin — no theme edits required.

Step 1 — Get the current widget script URL

  1. Go to vercel.com/kevinbaluha and open the chat-seniorplacementhelpline project
  2. Copy the production URL (e.g. https://chat-seniorplacementhelpline.vercel.app)
  3. The widget script path is: /widget.js — full URL example:
    https://chat-seniorplacementhelpline.vercel.app/widget.js

Step 2 — Remove old embed (if present)

  1. In WordPress Admin, go to Plugins → Installed Plugins
  2. Search for Insert Headers and Footers, WPCode, or any script manager that was used previously
  3. Open the plugin and delete any existing Jeremy widget script snippet

Step 3 — Add the new embed

  1. Install WPCode — Insert Headers and Footers + Custom Code Snippets (free) if not already installed
  2. Go to Code Snippets → Add Snippet → HTML Snippet
  3. Paste the following script tag (replace the URL with the current Vercel deployment URL if it has changed):
    <script
      src="https://chat-seniorplacementhelpline.vercel.app/widget.js"
      data-site="seniorplacementhelpline.com"
      defer
    ></script>
  4. Set Location to Footer — Site Wide
  5. Activate the snippet and save

Step 4 — Verify on the live site

Troubleshooting: If the widget doesn't appear, check the browser console for CORS or 404 errors. Confirm the Vercel project is deployed and the URL is correct. If Vercel shows a failed deployment, redeploy from the Vercel dashboard or push a commit to trigger a new build.
Notes
12

Install Meta Pixel (Facebook Tracking)

The Meta Pixel lets you track visitor behavior, measure contact form conversions, and build retargeting audiences on Facebook and Instagram. Install it through GTM — no theme edits required.

Prerequisite: GTM (GTM-WWBTPN7Q) must already be installed on the site (Section 3). If it isn't, complete that section first.

Step 1 — Get your Meta Pixel ID

  1. Go to business.facebook.com/events Manager
  2. Select your ad account for Senior Placement Helpline
  3. Click Connect Data Sources → Web → Meta Pixel → Connect
  4. Name the pixel (e.g. SPH Website) and enter the site URL
  5. Copy the Pixel ID — it's a 15–16 digit number (e.g. 1234567890123456)
Note: If a pixel already exists for this account, find it in Events Manager → Data Sources. Do not create a duplicate.

Step 2 — Add the Pixel base code via GTM

  1. Open Google Tag Manager and open the SPH container (GTM-WWBTPN7Q)
  2. Click Tags → New
  3. Name the tag: Meta Pixel — Base Code
  4. Click Tag Configuration → Custom HTML
  5. Paste the following, replacing YOUR_PIXEL_ID with your actual Pixel ID:
    <!-- Meta Pixel Code -->
    <script>
    !function(f,b,e,v,n,t,s)
    {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
    n.callMethod.apply(n,arguments):n.queue.push(arguments)};
    if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
    n.queue=[];t=b.createElement(e);t.async=!0;
    t.src=v;s=b.getElementsByTagName(e)[0];
    s.parentNode.insertBefore(t,s)}(window, document,'script',
    'https://connect.facebook.net/en_US/fbevents.js');
    fbq('init', 'YOUR_PIXEL_ID');
    fbq('track', 'PageView');
    </script>
    <noscript>
      <img height="1" width="1" style="display:none"
        src="https://www.facebook.com/tr?id=YOUR_PIXEL_ID&ev=PageView&noscript=1"
      />
    </noscript>
    <!-- End Meta Pixel Code -->
  6. Under Triggering, select All Pages
  7. Save the tag

Step 3 — Track Lead conversions (contact form)

Fire a Lead event when a visitor submits the contact form. This is the most important conversion event for retargeting and ad optimization.

  1. In GTM, click Tags → New
  2. Name it: Meta Pixel — Lead Event
  3. Tag type: Custom HTML
  4. Paste:
    <script>
      fbq('track', 'Lead');
    </script>
  5. Under Triggering, create a new trigger:
    • Type: Form Submission (or Page View on the thank-you page if one exists)
    • Fire on: All Forms — or narrow to forms on the contact page URL
  6. Save the tag
Tip: If the contact form redirects to a thank-you page (e.g. /thank-you/), use a Page View trigger on that URL instead of a form submission trigger — it's more reliable.

Step 4 — Publish the GTM container

  1. In GTM, click Submit → Publish
  2. Add a version name: Add Meta Pixel base code + Lead event
  3. Click Publish

Step 5 — Verify with Meta Pixel Helper

  1. Install the Meta Pixel Helper Chrome extension
  2. Visit seniorplacementhelpline.com — the extension should show a green checkmark with your Pixel ID and a PageView event
  3. Submit the contact form — the extension should fire a Lead event
  4. In Meta Events Manager, check the Test Events tab to confirm events are arriving in real time
Notes

Added: May 14, 2026

GTM container: GTM-WWBTPN7Q (must be live before pixel will fire)

Standard events used: PageView (all pages), Lead (contact form)

13

Header / Hero Section Copy Revisions

Three copy updates to the homepage header and hero section. Make these changes directly in the Avada page builder or WordPress editor.

Change 1 — Hero Headline

Find and update the main hero headline:

FromTo
“When it comes to Assisted Living…” “When it comes to Assisted Living or Memory Care…”

Where to find it: Avada Builder → Homepage → Hero section → Heading element. Search the page for Assisted Living if the layout has changed.

Change 2 — Trust Metric in Hero / Header

Update the social proof line wherever it appears in the hero or header:

FromTo
“Trusted by hundreds of families” “Trusted by thousands of families”

Where to find it: Avada Builder → Homepage → Hero or header area. May appear as a text element, counter element, or inside a column.

Change 3 — Global Search for “hunDreds” Social Proof References

Do a site-wide search for any remaining instances of “hunDreds” in a family trust or social proof context and update them to “thousands” for consistency.

  1. In WordPress Admin, go to Tools → Theme File Editor — or use your FTP client / cPanel File Manager
  2. Alternatively, use a find-and-replace plugin: install Better Search Replace (free) → search for hundreds of families, replace with thousands of families, run on wp_posts table
  3. Review results before committing — only replace instances that refer to family/client social proof, not unrelated numeric references
  4. Check these locations manually after the replace:
    • Homepage hero and header
    • About page
    • Any sidebar widgets or footer text
    • Testimonials section
    • Any popups or modal overlays
Better Search Replace plugin: WordPress Admin → Tools → Better Search Replace. Run a dry-run first to preview what will change before committing.
Notes

Requested: May 14, 2026

Scope: Homepage hero headline + trust metric; plus global consistency pass for all “hunDreds” social proof references site-wide.

Validation Tools

Use these to confirm everything is working after implementation:

Tool URL What It Checks
Schema Validator validator.schema.org JSON-LD syntax correctness
Rich Results Test search.google.com/test/rich-results FAQ rich result eligibility
Google Search Console search.google.com/search-console Indexing, coverage, impressions
PageSpeed Insights pagespeed.web.dev Core Web Vitals / page speed
Screaming Frog (free) screamingfrog.co.uk Full technical SEO crawl