01
The bottom line
14 findings
Little Stars is structurally invisible for two of its three markets. The cause is not competition — it is that the site never tells Google those two markets exist. There is no page that can rank for The Woodlands. There is no page that can rank for Texas City. No page on the domain carries a city name in its title or its main heading.
0/8Pages with local business structured data
1/8Pages with an <h1> — and it reads “Services”
0Dedicated pages for the three target cities
40%Of the sitemap is Duda demo content about wallpaper
2/2Conversion pages deliberately hidden from Google
10.7 MBHomepage weight, zero images lazy-loaded
8/8Pages with a broken “Call Us” button
0/5Competitors with local schema — the ground is unoccupied
Field note · the wedge
The two markets nobody is physically in
Little Stars owns something its strongest competitor does not: three physical addresses across the Houston metro, including 10815 Kuykendahl Road in The Woodlands and 7228 Medical Center Drive in Texas City.
Spark Pediatrics — the clear content leader in this niche — runs one center, on Sands Point Drive in Houston. On the Houston location page I fetched, the words “Woodlands”, “Pasadena” and “Texas City” appear zero times each.
A parent in The Woodlands searching for medical daycare near them is being served results by centers that are not in The Woodlands. Little Stars is in The Woodlands, and has no page that says so in a way Google can use. Start there, not with the Pasadena fight.
02
How to read this
Every finding carries a confidence label. They are not decoration — they separate what you can act on today from what needs an instrument we do not have yet.
ConfirmedMeasured directly, reproducible with the command shown.
LikelyStrong evidence, one instrument only.
HypothesisReasoned, not measured. A question, not a fact.
BlockedNeeds access we do not have.
Not measuredNobody has measured it, including me. Not the same as “fine”.
Each finding shows the actual bytes the site served, so you can check any claim here without taking my word for it.
03
Critical · fix first
7 findings
Seven defects that block everything downstream. All seven are fixable inside Duda — no platform migration.
Critical 01
Three markets claimed, one identity Google can see
Confirmed
The header of every page reads “The Woodlands, TX. / Pasadena, TX. / Texas City, TX.” All three addresses are real. All three appear on exactly one page — /contact-us — and only Pasadena repeats in the sitewide footer.
There is no /the-woodlands, no /pasadena, no /texas-city. The site’s own location widget renders a link labelled “Go to location page”, and there is no location page for it to point at.
Instrument reading · internal links on /contact-us
/ /about-us /admission /services /parents-resources
/contact-us /patient-referral-form /request-tour
— no /the-woodlands, no /pasadena, no /texas-city —
<a class="dmGeoSVGoToPage">Go to location page</a> ← points nowhere
Google ranks pages, not intentions. For “PPEC near me” searched from The Woodlands or Texas City, nothing on this domain is eligible to win. This one defect costs more than every other item here combined, because it forfeits two of three markets entirely.
Fix
- Build
/ppec-the-woodlands-tx, /ppec-pasadena-tx, /ppec-texas-city-tx.
- Each gets a unique
<h1>, that center’s full NAP, hours, photos, directions, insurances, and 150+ words of genuinely center-specific copy. Do not clone one page three times — near-duplicate city pages are a known local-SEO failure.
- Link them from header, footer and the location widget. Add all three to the sitemap.
Critical 02
Zero structured data on every real page
Confirmed
All eight real pages return 0 JSON-LD blocks. No Organization, no LocalBusiness, no MedicalClinic, no FAQPage, no BreadcrumbList.
The irony is exact: the only structured data on the entire domain sits on four Duda demo blog posts — and it describes wallpaper.
Instrument reading · JSON-LD by page
/ jsonld=0 []
/services jsonld=0 []
/about-us jsonld=0 []
/admission jsonld=0 []
/parents-resources jsonld=0 [] ← has a real FAQ, unmarked
/contact-us jsonld=0 []
/request-tour jsonld=0 []
/patient-referral-form jsonld=0 []
/how-to-choose-a-sofa jsonld=1 ['BlogPosting','Person'] ← the only schema on the site
/parents-resources publishes genuine FAQ content — “How does Little Stars distinguish itself from traditional home health services?” — with no FAQPage markup, so it cannot earn FAQ rich results or be cleanly lifted by an AI answer engine.
Fix
MedicalClinic JSON-LD per location page: name, address, geo, telephone, openingHoursSpecification, areaServed, medicalSpecialty.
Organization sitewide with sameAs → the Facebook and Instagram profiles that already exist.
FAQPage on /parents-resources, matching the visible questions exactly. BreadcrumbList sitewide.
Critical 03
Four Duda demo posts, in Spanish, about interior decorating
Confirmed
Four of the ten sitemap URLs are untouched template content: English slugs, Spanish bodies, subject matter with nothing to do with pediatric care. They are indexable, self-canonical, in the sitemap — and they hold four of the five <h1> elements on the entire domain.
| URL slug | Actual <h1> | Translation |
/how-to-choose-a-sofa | Elegir la lámpara correcta | “Choosing the right lamp” |
/make-the-most-of-the-season… | Cuelga el papel pintado como un jefe | “Hang wallpaper like a boss” |
/keep-in-touch-with-site-visitors… | Los colores de la sala de estar | “Living room colors” |
/tips-for-writing-great-posts… | Cómo preparar las paredes para pintar | “How to prepare walls for painting” |
For a health site, template debris of this kind is a direct quality signal against the domain, and it muddies the topical picture Google builds.
Fix
Delete all four. Return 410 Gone (or 404 if Duda cannot). Do not redirect them to the homepage — redirecting irrelevant content onto a commercial page is itself a low-quality signal. Then resubmit the sitemap.
Critical 04
Both conversion pages are hidden from Google
Confirmed
The two highest-intent pages on the domain — the tour request and the referral form — are set to noindex and are absent from the sitemap. This is almost certainly a Duda default nobody revisited, not a decision.
Instrument reading
/request-tour robots=noindex title(12)="REQUEST TOUR" desc=0 h1=0
/patient-referral-form robots=noindex title(21)="Patient Referral Form" desc=0 h1=0
sitemap.xml contains either page: 0 matches
“Request a tour” is what a converting parent does. The referral form is what a discharge planner or pediatrician needs. The site cannot rank for either, and referral-source discovery is forfeited.
Fix
Remove noindex from both. Add real titles, descriptions and <h1>s, and add both to the sitemap. Keep any thank-you/confirmation page noindex — that one is correct to hide.
Critical 05
Seven of eight pages have no <h1>
Confirmed
Headings are being used as font sizes, not as structure. The contact block repeated on every page uses h3/h4/h5 for a phone number and an email address.
| Page | <h1> | Heading pattern |
/ home | none | h2×8 h3×9 h4×6 h5×3 |
/about-us | none | h2×4 h3×6 h4×2 h5×3 |
/admission | none | h2×1 h3×9 h4×2 h5×3 |
/parents-resources | none | h2×3 h3×6 h4×2 h5×4 |
/contact-us | none | h2×1 h3×4 h4×3 h5×3 |
/request-tour | none | h2×1 h3×4 h4×2 h5×3 |
/patient-referral-form | none | h3×4 h4×2 h5×3 |
/services | “Services” | h1×1 h2×1 h3×9 h4×2 h5×3 |
On the homepage the brand name in the hero is split across separate elements — Little / S / t / a / r / s — so the most visually prominent text on the site is not a single readable phrase in the markup.
Fix · one h1 per page, service + city
- Home → Prescribed Pediatric Extended Care (PPECC) in the Houston Area
/admission → PPECC Admission and Medicaid Eligibility in Texas
- Location pages → Prescribed Pediatric Extended Care in The Woodlands, TX
- Demote the decorative contact headings to
<p> with styling.
Critical 06
The “Call Us” button is broken on every page
Confirmed
Every page carries three working phone links and one broken one. The broken one sits inside the location widget — the button a local searcher on a phone actually taps.
Instrument reading · served HTML, every page
<a … href="tel:asdasda" phone="asdasda">…<span class="text">Call Us</span></a>
tel: links per page {'1 8335487827': 3} + {'asdasda': 1}
mailto: links on the whole domain 0
Placeholder keyboard-mashing that shipped to production, on the highest-intent interaction a healthcare site offers. /contact-us has two of them.
Fix
Set the widget phone to +18335487827. Normalise the three working links from tel:1 8335487827 (with a space) to tel:+18335487827. Make info@littlestarsppec.com an actual mailto: link — it appears as plain text on all eight pages.
Critical 07
https://littlestarsppec.com throws a security warning
Confirmed
Instrument reading · curl + openssl
http://littlestarsppec.com/ 301 → https://www.littlestarsppec.com/ ✓
https://littlestarsppec.com/ TLS failure — no valid certificate ✗
https://www.littlestarsppec.com/ 200, valid Let's Encrypt cert ✓
apex A records → 15.197.142.173, 3.33.152.147 (forwarding, no cert)
www CNAME → s.multiscreensite.com (Duda, cert valid)
Chrome and Safari now try HTTPS first. A parent, nurse or referring physician who types the bare domain — from a flyer, a card, or memory — can land on a full-page security interstitial. On a healthcare site that is a trust event, not a technicality. It also breaks any inbound link written as https://littlestarsppec.com.
Fix
In GoDaddy DNS, forward the apex with HTTPS provisioned, or point the apex at Duda directly per their apex instructions so the certificate covers both hostnames. Verify with curl -I https://littlestarsppec.com/.
04
High impact
7 findings
High 08
The homepage weighs 10.7 MB and lazy-loads nothing
Confirmed
Instrument reading · 58 unique images measured
HTML 385 KB
images 10,602,255 bytes (10.6 MB)
images with loading="lazy" 0 of 60
images with width+height 3 of 60
48 of 60 images = the embedded Instagram feed, 150–512 KB each
Recurso+210-1920w.png 466 KB final02-1920w.png 350 KB
United+Healthcare-1920w.png 117 KB ← an insurance logo
Spark Pediatrics, same measurement: 69 of 70 lazy, 168 KB HTML
Duda serves every image at -1920w regardless of display size. Largest Contentful Paint and layout shift will both suffer, especially on the mobile connections most parents use.
Fix
- Lazy-load the Instagram feed or replace it with a static six-image gallery — this alone removes ~8.9 MB.
- Let Duda serve responsive sizes instead of 1920w originals; convert logos to WebP/SVG.
- Add width and height to every image to stop layout shift.
- Rename files —
Recurso+210.png and Captura+de+pantalla+2023-12-01.png carry no signal. Use little-stars-ppec-pasadena-nursing-room.webp.
Not measured: real Core Web Vitals field data. Payload predicts LCP; it is not LCP. Needs PageSpeed Insights or CrUX.
High 09
Untranslated Duda placeholder text on all eight pages
Confirmed
Instrument reading · every page
<div data-element-type="html" class="dmCustomHtml">Insertar su HTML personalizado</div>
“Insert your custom HTML” — an unconfigured widget printing its own
Spanish placeholder onto a live page declaring lang="en".
/services additionally renders “Menú” as an <h3>, twice.
A visible unfinished-site signal on a health page, plus stray Spanish tokens. Small effort, disproportionate trust cost.
Fix
Delete the empty custom-HTML widget on all eight pages. Rename the “Menú” headings and demote them from <h3>.
High 10
The homepage’s word count is mostly Instagram hashtags
Confirmed
The homepage reports 4,744 words, which looks healthy until you read them. Most are Instagram captions and hashtag walls pulled in by the feed widget.
Instrument reading · why “Pasadena ×128” is misleading
raw HTML token counts, homepage:
Pasadena 128 Houston 170 Woodlands 11
Texas City 6
…and the source of nearly all of them:
#LittleStarsPediatricCenter #PediatricTherapy #PhysicalTherapy
#OccupationalTherapy #SpeechTherapy #PediatricNursing #PasadenaTX …
Hashtags, not on-page location content.
Inflated word count masks thin real content, and creates a false sense that the site “mentions Pasadena a lot” when it has no Pasadena page.
Fix
Cut the feed to six images without caption text. Write 600–900 words of real homepage copy: what PPECC is, who qualifies, what Medicaid covers, and the three locations with links to their pages.
High 11
Only one title on the site contains a place name
Confirmed
| Page | Title len | Desc len | Problem |
/ | 53 | 181 | Description over ~160. Title says “Child Medical Daycare”, never “PPECC” |
/about-us | 84 | 228 | Both truncate in results |
/parents-resources | 73 | 248 | Description truncates badly |
/contact-us | 42 | 61 | Description is about therapy, not contact. No city |
/services | 48 | 107 | Acceptable. No city |
/admission | 41 | 137 | Acceptable. No city |
/request-tour | 12 | 0 | “REQUEST TOUR”, all caps, no description |
/patient-referral-form | 21 | 0 | No description |
The only geographic token in any title on the domain is “| Texas” at the end of /parents-resources. Nothing names The Woodlands, Pasadena, Texas City or Houston.
Fix
Titles 50–60 characters, descriptions 140–160, every commercial page carrying a city or “Houston area”. For example: PPECC Medical Daycare in Pasadena, TX | Little Stars Pediatric.
High 12
No Google Business Profile signal anywhere on the site
Confirmed / Blocked
Across all eight pages there is not one link to Google Maps, a g.page short link, or a reviews profile. Social presence is Facebook and Instagram only, and with no JSON-LD there is no sameAs anywhere — zero occurrences on eight pages.
Whether the three GBP listings exist is Blocked — that needs Google Business Profile access we do not have. But for a three-location clinic the local pack is where most visibility lives, and the site currently does nothing to reinforce it.
Fix
- Confirm or claim GBP for all three addresses. This is the highest-leverage off-site action for the two unserved markets.
- Make NAP on each location page match GBP character for character.
- Cross-link each location page with its listing. Start a review programme.
High 13
The third location is labelled “Texas”, not “Texas City”
Confirmed
In the /contact-us location widget the three entries read “The Woodlands”, “Pasadena” and “Texas”. The address beneath the third is correct — 7228 Medical Center Drive, Texas City, TX 77591 — but the city name is truncated in the one place on the site where a city list exists. Any NAP aggregator or AI extractor reading that widget learns the wrong locality.
Fix
Rename to “Texas City”. One field.
High 14
Address markup is split mid-word
Confirmed markup / Hypothesis impact
Instrument reading · /contact-us
<strong>10815 K</strong><strong style="display: initial;">uykendahl Road</strong>
<strong>7</strong><strong>228 Medical Center Drive</strong>
but: contiguous "10815 Kuykendahl Road" does appear elsewhere, ×2
Being precise about severity, because it matters: the contiguous string does exist in the location widget, and Google concatenates inline elements without inserting whitespace — so Google very likely reads this correctly. The impact on rankings is Hypothesis, and I would not spend a sprint on it.
Where it does bite is simpler parsers: NAP aggregators, directory scrapers and some AI extractors that insert a boundary at every element. Those read “10815 K uykendahl Road”.
Fix
Merge each address into a single text element while building the location pages. Two minutes — not its own project.
06
Competitive benchmark
same instrument, all six sites
Five competitors, each measured with the same script used on Little Stars, on 2026-09-03. This is measured markup, not opinion.
| Signal | Little Stars | Spark Pediatrics | Tender Care | Viva Pediatrics | Sunshine PDN |
| <h1> on the page | 0 | 1 | 9 ⚠ | 1 | 22 ⚠ |
| <h1> names service + city | No | “Supportive Medical Daycare (PPECC) in Houston, TX” | “Houston TX PPECC Center” | Service only | City only |
| City in the URL | No | /locations/houston-center | /houston-tx-ppec/ | No | No |
| Meta description | Partial | Missing | 142 chars | 245 chars | Missing |
| Canonical | Yes | No | Yes | Yes | Yes |
| JSON-LD blocks | 0 | 0 | 1 | 0 | 0 |
| LocalBusiness / Medical schema | No | No | No | No | No |
| FAQPage schema | No | No | No | No | No |
| Images lazy-loaded | 0 / 60 | 69 / 70 | 9 / 12 | 6 / 24 | 26 / 26 |
| HTML weight | 376 KB | 168 KB | 246 KB | 88 KB | 586 KB |
| Internal links | 15 | 37 | 2 | 26 | 0 |
| Multilingual (hreflang) | 0 | 4 | 0 | 0 | 0 |
Broken tel: link | Yes | No | — | No | — |
| Long-form content cluster | No | Yes — 2,380-word posts | No | No | No |
Tender Care returned 403 to my audit user-agent and 200 to both a browser and Googlebot — that was my instrument, not a closed site. Re-measured with a browser user-agent.
Deliberately absent from this table
Domain authority and keyword rankings. We hold no Ahrefs or SEMrush licence and neither has ever been validated here. Scraped SERP positions are not a measurement — they vary by location, history, device and minute. Position data comes from Search Console once it is connected. Anything else would be a number that looks like data and is not.
What the benchmark actually says
- Spark wins on content and speed, not technique. 2,463-word homepage, 2,380-word posts targeting “PPECC near me” + Houston, 69/70 images lazy-loaded, Spanish via hreflang. But no canonical, no meta description, no structured data. Beatable technically.
- Tender Care wins on technical local SEO. City in URL, city in title, proper robots directives, structured data. That is the pattern to copy — and it has two internal links and 970 words, so it is thin.
- Nobody has local business or FAQ schema. Five out of five. This is not a catch-up item, it is unoccupied ground.
- Nobody has a real multi-location architecture. Sunshine lists cities with 22
<h1>s and zero internal links. Little Stars, with three genuine addresses, is best placed to do it properly.
07
Target terms
volumes not measured
We have no keyword tool and no Search Console yet, so volume and difficulty are Not measured. These are grouped by intent and evidence, drawn from the terminology the site, the competitors and Texas HHS actually use. Once GSC is connected, replace this section with real query data — about a day’s work.
Local commercial
Own these first — they map one-to-one onto the three new location pages.
ppec the woodlands txppecc the woodlandsppec texas city txmedical daycare texas cityppec pasadena txppecc pasadena texasmedical daycare near meprescribed pediatric extended care houston
Service + qualifier
Parents who already know what they need.
ppecc medicaid texasstar kids ppeccmedical daycare for medically complex children houstonpediatric skilled nursing daycare houstonppec with transportation houstontracheostomy child daycare texasg-tube daycare texas
Referral source
Nobody in the measured competitive set is targeting these. Discharge planners and pediatricians are how centers fill.
ppecc referral form texashow to refer a patient to a ppeccppecc vs private duty nursingppecc vs home health texas
Informational · AEO
The long game, and what AI answer engines cite.
what is a ppeccdoes medicaid cover ppecc in texaswhat conditions qualify for ppecchow many hours can a child attend a ppeccppecc requirements texas
Spanish
Uncontested in this set. Pasadena market.
guardería médica pasadena txcuidado pediátrico extendido houstonppecc medicaid español
Terminology note (Confirmed): the site mixes PPEC and PPECC. In Texas the licensed benefit is PPECC. Standardise on PPECC in copy, headings and schema, keeping PPEC as a secondary variant — the domain cannot change, and does not need to.
One asset already exists and is buried: “Why PPECC instead of Private Duty Nursing or Home Health Care” is real, differentiated content sitting as an unlinked section of /services. It should be its own page.
09
How we will know it worked
The deterministic parts are already automated and re-runnable today. Both scripts are in the repository; every number in this report reproduces from them.
Commands
# Site-wide state vs the frozen baseline. Silent when nothing changed.
python3 scripts/littlestars-snapshot.py --diff # exit 0 = no change, 2 = material change
# Per-URL local-SEO probe. Same instrument for us and for competitors.
python3 scripts/local-seo-probe.py <url> [...] --json out.json
| Metric | Today | Instrument | Available? |
Pages with an <h1> | 1 / 8 | snapshot / probe | Now |
| Pages with local schema | 0 / 8 | probe | Now |
| Location pages live | 0 | sitemap | Now |
| Sitemap URLs that are demo content | 4 / 10 | snapshot | Now |
| Conversion pages indexable | 0 / 2 | probe | Now |
| Homepage payload | 10.7 MB | curl | Now |
| Apex HTTPS valid | No | curl / openssl | Now |
| Impressions, clicks, position, indexed pages | — | Search Console | Blocked |
| Local pack views, calls, directions | — | Google Business Profile | Blocked |
| Core Web Vitals (field) | — | PageSpeed / CrUX | Not measured |
The two blocked rows are the ones that answer “is it working?”. Everything above them proves the site changed; only Search Console and Business Profile prove the market noticed. That is why Phase 0 comes first.