Executive Summary

Over the past few weeks we ran a deep technical audit of palmspringsairmuseum.org — a full crawl of every page on the main site and the shop subdomain, plus separate analyses of how the site loads for real visitors on desktop and mobile. The pages that follow walk through what was found, what each finding means in plain English, and what the web team can do to address it.

The headline: the mobile experience is severely compromised. On a typical smartphone, the homepage takes about 24 seconds to finish loading — long enough that most visitors will give up and leave before the page is ready. Desktop loads much faster, but it has its own issue: the page sits frozen for nearly a full second after appearing, while heavy scripts finish running. These aren't subjective complaints — they're measurements from Google's own performance tooling, and Google increasingly factors them into where the museum shows up in search results.

On top of the speed issue, the site's WordPress installation has accumulated a fair amount of technical debt over the years: a sitemap file that doesn't actually deliver a sitemap, hundreds of pages with no preview text in Google search results, dozens of auto-generated tag pages that compete with real content, and a handful of broken navigation links the museum's own menu still points at. None of this is unusual for a WordPress site that's been live and growing for a long time, and none of it is catastrophic on its own — but together they're holding back the museum's reach. The good news is that almost every issue is fixable with focused effort, and the report below identifies which fixes are the highest leverage.

The detailed numbers below come from Google's PageSpeed Insights tool. Each metric measures a different part of the page's loading experience — how fast something appears, how fast the page is usable, how stable the layout is. We show desktop and mobile side by side because they're measured under very different network and CPU conditions, and the gap between them is usually huge.

Desktop

49
Performance
74
Accessibility
77
Best Practices
Metric Value Pass
First Contentful Paint
Time it takes for the FIRST piece of content (text, image, or button) to appear on screen after a visitor clicks the link. The first "sign of life" the visitor sees. Anything under 1.8 s feels snappy. Over 3 s feels broken.
1.6 s Good
Largest Contentful Paint
Time until the BIGGEST visible element on the page (usually the hero image or main heading) finishes loading. This is what Google uses as the "page is ready" signal. Under 2.5 s is good; over 4 s feels broken.
2.4 s Good
Total Blocking Time
How long the page is FROZEN — the visitor can see content but tapping or scrolling does nothing because JavaScript is busy. Almost always caused by heavy ad scripts, tracking pixels, or chat widgets. Under 200 ms is good; over 600 ms is brutal on mobile.
930 ms Poor
Cumulative Layout Shift
How much stuff JUMPS AROUND on the page after it first appears (e.g., an ad loads and pushes the article down just as you go to tap a link). Score is a number, not a time. Under 0.1 is good — barely perceptible.
0.006 Good
Speed Index
An overall "how fast does the page paint" score. It watches the page render and asks: at what time was the screen mostly filled with content? Under 3.4 s is good; over 5.8 s feels slow.
2.3 s Good
Time to Interactive
Time until the page is fully responsive — every button works, every menu opens. Often dramatically slower than Largest Contentful Paint because JavaScript keeps running after pixels appear on screen. Under 3.8 s is good; over 7.3 s is poor.
4.5 s Needs Work
Server Response Time
How long the web server takes to send the FIRST byte of the page after the request arrives. Doesn't include rendering or JavaScript — it's purely server-side. Under 200 ms is good. Cloudflare's CDN typically gets this under 50 ms.
Root document took 10 ms Good

Mobile

46
Performance
74
Accessibility
73
Best Practices
Metric Value Pass
First Contentful Paint
Time it takes for the FIRST piece of content (text, image, or button) to appear on screen after a visitor clicks the link. The first "sign of life" the visitor sees. Anything under 1.8 s feels snappy. Over 3 s feels broken.
14.1 s Poor
Largest Contentful Paint
Time until the BIGGEST visible element on the page (usually the hero image or main heading) finishes loading. This is what Google uses as the "page is ready" signal. Under 2.5 s is good; over 4 s feels broken.
24.0 s Poor
Total Blocking Time
How long the page is FROZEN — the visitor can see content but tapping or scrolling does nothing because JavaScript is busy. Almost always caused by heavy ad scripts, tracking pixels, or chat widgets. Under 200 ms is good; over 600 ms is brutal on mobile.
380 ms Needs Work
Cumulative Layout Shift
How much stuff JUMPS AROUND on the page after it first appears (e.g., an ad loads and pushes the article down just as you go to tap a link). Score is a number, not a time. Under 0.1 is good — barely perceptible.
0 Good
Speed Index
An overall "how fast does the page paint" score. It watches the page render and asks: at what time was the screen mostly filled with content? Under 3.4 s is good; over 5.8 s feels slow.
14.1 s Poor
Time to Interactive
Time until the page is fully responsive — every button works, every menu opens. Often dramatically slower than Largest Contentful Paint because JavaScript keeps running after pixels appear on screen. Under 3.8 s is good; over 7.3 s is poor.
24.5 s Poor
Server Response Time
How long the web server takes to send the FIRST byte of the page after the request arrives. Doesn't include rendering or JavaScript — it's purely server-side. Under 200 ms is good. Cloudflare's CDN typically gets this under 50 ms.
Root document took 10 ms Good

Crawl Context

Broken Links (Full Site) 23
Duplicate Content 1,289
Duplicate Titles 923
Mixed Content 1,839
Images No Alt Text 1,839
Render-Blocking Resources 1,839

Issues by Count

XML sitemap returns HTML (soft 404)
956
Missing meta descriptions
871
Titles too long (>60 chars)
535
Duplicate titles
190
Broken/blocked pages
66
Cloudflare WAF blocking content
58
Internal redirects
15

Issue Detail

CRITICAL XML sitemap returns HTML (soft 404)
956 affected pages

What it is: An XML sitemap is the file that tells Google "here is every page on my website." The file at /wp-sitemap.xml exists, but it's returning the homepage HTML instead of an XML document. Google treats that as a soft-404 — meaning it doesn't recognize the file as a sitemap, so the museum's deeper pages (event listings, Warbird Wednesday profiles, gala honorees) often go un-indexed for months.

How to fix: Either re-enable WordPress's built-in sitemap (something on the site is intercepting that URL with the page template) or install an SEO plugin (Yoast SEO, Rank Math) that emits proper application/xml, then submit the working URL in Google Search Console.

CRITICAL Missing meta descriptions
871 affected pages

What it is: A meta description is the 1–2 sentence preview that shows up under the page title in Google search results. Only 85 of 956 pages on this site have one — meaning 91% of the museum's content is showing up in Google with whatever random snippet Google decided to grab (often the navigation menu or a footer disclaimer instead of a real description).

How to fix: Install or activate an SEO plugin (Yoast SEO, Rank Math, or All in One SEO). Each adds a Meta Description field beneath the post editor — write a 120–160 character description for each page. For 871 pages, doing it manually is brutal; use the AI-write button most plugins now ship to generate descriptions from the post body, then review and tweak.

HIGH Titles too long (>60 chars)
535 affected pages

What it is: Search engines truncate page titles at about 60 characters in their results — anything past that turns into a "…" cutoff. On this site, 535 pages have titles longer than 60 characters, mostly because the WordPress theme is auto-appending " – Palm Springs Air Museum" to every title (which alone eats roughly 30 characters of every title's budget).

How to fix: In the SEO plugin's title-template setting, drop the trailing " – Palm Springs Air Museum" suffix from internal pages — Google adds the brand name automatically. Then audit individual long titles and trim them to 50–60 characters, leading with the unique part (the aircraft, the event date, the honoree).

HIGH Duplicate titles
190 affected pages

What it is: 190 pages on this site share a title with at least one other page. Open Cockpit Saturday events are the largest offender — 19 different event pages all titled the same thing. When pages share titles, Google can't tell which is the "main" page for that topic, so it picks one and buries the others (a phenomenon called cannibalization).

How to fix: Edit each duplicate post in WP Admin → Posts and add a unique differentiator to the title — usually the date or sequence number. "F-104 Starfighter — Open Cockpit Saturday, June 7 2025" beats a generic "Open Cockpit Saturdays — F-104 Starfighter." For bulk renames, the Better Search Replace plugin can append the date to all 19 affected titles in one operation (back up the database first).

HIGH Broken/blocked pages
66 affected pages

What it is: 66 pages on the site failed to load during the audit — 8 are broken-link 404s (the page truly doesn't exist) and 58 are 403 "blocked by site security" (the security service refused to load them). Visitors and Google's crawler hit the same walls when they try to access those URLs.

How to fix: For the 8 broken links, see the Crawl Health page — each one is listed with the source page that's still linking to it. Either restore the missing page, redirect to the most relevant existing page, or remove the broken inbound link. For the 58 blocked pages, see the next item.

HIGH Cloudflare WAF blocking content
58 affected pages

What it is: The site's Web Application Firewall (Cloudflare's bot-detection or Wordfence — whichever is active) blocked 58 pages from being audited. The pages exist, but the security service treated our crawler as a suspicious visitor and turned us away with a 403 Forbidden response. The same thing can happen to Googlebot and to real visitors on VPNs, mobile carriers, or older browsers.

How to fix: In Cloudflare → Security → Bots, enable "Verified Bots" so Googlebot, Bingbot, and other legitimate crawlers are allow-listed. If Wordfence or another WordPress security plugin is active, add the same crawlers to its allow list. Reduce bot-detection sensitivity on standard browsing paths (/programs/, /blog/) and keep aggressive blocking only on /wp-login.php and /wp-admin/.

MEDIUM Internal redirects
15 affected pages

What it is: 15 URLs on this site redirect to a different URL when visited. Most are routine (http→https, www→non-www, slug-cleanup) and harmless — but a few are problematic: the main "Warbird Rides" navigation link redirects to a page that returns 404, and several internal menus still point at old URLs that bounce through redirects on every visit.

How to fix: See the Redirect Chains section on the Crawl Health page for the full breakdown — each redirect is categorized (BROKEN, slug-cleanup, typo handler, protocol normalization) with concrete WordPress steps for each kind, plus a list of which internal links are still using the old URLs.

Domain-Level Checks

8passing
3failing
XML SitemapFAIL

An XML sitemap is the file that tells Google "here is every page on my website." Without one, Google has to discover pages by following links — slower and less reliable. On this site: the file at /wp-sitemap.xml returns the homepage HTML instead of an XML document, so search engines won't recognize it as a sitemap. Needs fixing.

  • /wp-sitemap.xml returns HTTP 200 OK but with Content-Type: text/html — it's serving the homepage HTML instead of an XML document. Google treats this as a soft-404 and won't recognize it as a sitemap. To fix: either re-enable WordPress's built-in sitemap (something on the site is intercepting that URL with the page template) or install an SEO plugin (Yoast or Rank Math) that emits proper application/xml, then submit the working URL in Google Search Console.
Robots.txtFAIL

A small text file at /robots.txt tells search engines which parts of the site they may or may not crawl. On this site: the file exists, but its contents have several issues — see the list below.

  • No Sitemap: declaration. The robots.txt file should end with a line like `Sitemap: https://palmspringsairmuseum.org/wp-sitemap.xml` so search engines know where to find the sitemap. Currently missing entirely.
  • Crawl-delay: 3 is set. Google ignores crawl-delay, but Bing, Yandex and other engines honor it — meaning a full 12,000-URL re-crawl would take Bing ~10 hours of forced waits. Either remove it or lower to 0.5s.
  • Two separate `User-agent: *` blocks (one in the Cloudflare-managed section at the top, one in the default block at the bottom). When a crawler hits two wildcard blocks, behavior is undefined — some only read the first, some merge, some ignore the file. Consolidate into one block.
  • `Disallow: /*?` blocks every URL containing a question mark. This kills indexable URLs that use query parameters legitimately (search result pages, calendar views, share links). Replace with narrower rules targeting the specific noise patterns.
Start Page Deny FlagPASS

Some sites accidentally include a "don't index this page" tag in their homepage HTML. If the homepage carried that tag, the entire site would vanish from Google. On this site: no such tag was found — the homepage is fully indexable.

SSL CertificatePASS

A valid SSL certificate gives your site the padlock icon and the https:// prefix. Browsers warn visitors away from sites without one, and Google ranks them lower. On this site: the certificate is valid and current.

HTTP/2PASS

HTTP/2 is the modern version of the protocol browsers use to talk to your server. It loads pages substantially faster than the older HTTP/1.1 by sending multiple files at once. On this site: HTTP/2 is enabled — pages load with the modern, faster protocol.

Canonical URLsFAIL

Every page should declare one "official" URL via a <link rel="canonical"> tag, so Google knows which version is the official one when several URLs serve similar content (with/without trailing slash, with tracking parameters, etc.). On this site: the canonical-URL setup failed our check — the homepage doesn't carry a clean canonical tag. Fix in the SEO plugin or theme template.

WWW RedirectPASS

Your site can be reached at both www.palmspringsairmuseum.org and palmspringsairmuseum.org. To search engines, those look like two different websites unless one automatically forwards to the other. On this site: the forwarding is set up correctly — visitors who type either version end up at the same place.

Hidden Server SignaturePASS

Default web server installations broadcast their software name and version (e.g. "Apache 2.4.41 Ubuntu") in HTTP headers. Hiding this makes the site a smaller target for automated attacks. On this site: the signature is hidden.

404 (Broken Link) Page HandlingPASS

When a visitor hits a URL that doesn't exist, the server should return a real 404 (broken link) response with a custom error page ("sorry, that page is missing — try the home page"). Misconfigured sites return a 200 OK with the homepage instead, which confuses Google. On this site: broken-link handling is working correctly.

Directory Browsing DisabledPASS

If someone visits a folder URL like /wp-content/uploads/, the server should refuse to list its contents. When directory browsing is left on, anyone can scrape your file structure. On this site: directory browsing is disabled — folder contents are not exposed.

HTTPS RedirectPASS

If a visitor types http:// (not https://), the server should automatically forward them to the secure version. Otherwise users land on the insecure URL and see a browser warning. On this site: the http→https redirect is working — visitors who type the insecure URL land on the secure one.

Site Info

CMS WordPress (WPBakery Page Builder)
Server / CDN Cloudflare
IP Address 104.21.89.57
SSL Issuer CN=WE1, O=Google Trust Services, C=US
SSL Expiry 2026-05-31 05:24:58 +00:00
SSL Algorithm sha256ECDSA
956Live PagesContent pages indexed
66Broken / BlockedBlocked + broken-link responses
871Missing Meta Descriptions9% coverage

Full Crawl Issues Summary

23 Broken Links Found
1,289 Duplicate Content Instances
923 Duplicate Title Instances
1,839 Mixed Content Warnings
1,839 Images Missing Alt Text
1,839 Render-Blocking Resources

Content Charts

Every chart on this page lives here. Each visualization is grouped under a heading describing what it shows.

Full Site Content Map — 4 Levels Deep

All 956 live pages flowing left-to-right through the site hierarchy. Shop (226 pages on subdomain) is a dead end — flat product pages with no sub-structure. Blog and Events each drill down to individual content types and aircraft categories.

Shop Deep Dive (226 pages)

The shop runs on a separate subdomain (shop.palmspringsairmuseum.org). All 226 shop pages break out left-to-right as follows: Art & Signs leads with 49 product pages, followed by Other Items (43), Apparel (34), and Collectibles (29). The 22 WooCommerce category-listing pages and 1 shop homepage are also part of the 226 total.

Content Flow — Status to Categories

1,037 content pages split by HTTP status, then the 956 live pages flow into content categories. Events, Blog, and Shop account for 85% of all content.

Title Length Analysis

2Too Short (<30 chars)
497Good (30-59 chars)
1343Too Long (60+ chars)
Distribution of title tag lengths across 1,842 pages. Green bars are within the 30–60 character SEO sweet spot. Orange dashed line = minimum recommended (30 chars). Red dashed line = maximum (60 chars) — Google truncates beyond this. Mean title length: 69 characters.

Meta Description Coverage

871of 956 pages missing meta descriptions
85have meta desc
9% covered91% missing
Meta descriptions are critical for search result CTR. At current coverage, only 85 pages have a description that appears in Google search results.

Duplicate Titles 136 affected pages

Why this hurts: when ten pages share the same title, Google has to guess which one is the "main" page for that topic. Usually it picks one and buries the others — a phenomenon called cannibalization. The buried pages still exist, still cost crawl budget, and still show up in your sitemap, but no one finds them. For a museum site where each Open Cockpit Saturday or Warbird Wednesday post is supposed to attract its own audience, this means months of content quietly going invisible.

Best titling practices for events & recurring posts:

  • Lead with the unique part. "F-104 Starfighter — Open Cockpit Saturday, June 7, 2025" beats "Open Cockpit Saturdays — F-104 Starfighter".
  • Include the date or sequence number on every recurring event. The date IS the differentiator — without it, ten Saturdays look like one Saturday.
  • Keep titles 50–60 characters so Google shows the full title, not a truncated "…".
  • One H1 per page matches the page's role. The H1, the title tag, and the slug should tell the same story.
  • Drop the boilerplate suffix ("— Palm Springs Air Museum") on internal pages — Google adds the brand for you, and the suffix eats 30 characters of every title.

How to fix in WordPress: open each duplicate post in WP Admin → Posts, edit the post title, and (if Yoast / Rank Math / All in One SEO is installed) edit the SEO title field separately so the browser-tab title and the search-result title can differ. For the Open Cockpit Saturdays specifically, a bulk find-and-replace plugin like Better Search Replace can append the date to all 19 affected titles in one operation — but make a database backup first.

Title Duplicate Count
Open Cockpit Saturdays: F-104 Starfighter – Palm Springs Air Museum 19
Open Cockpit Saturdays: P-47 Thunderbolt – Palm Springs Air Museum 19
Open Cockpit Saturdays: P-40 Warhawk – Palm Springs Air Museum 19
Open Cockpit Saturdays: F4U Corsair – Palm Springs Air Museum 14
DARKSTAR and NASA X-38 ON VIEW INSIDE HANGAR – Palm Springs Air Museum 12
Open Cockpit Saturdays: Supermarine Spitfire Mk XIV – Palm Springs Air 10
Open Cockpit Saturdays: F4F Wildcat – Palm Springs Air Museum 6
Open Cockpit Saturdays: F7F Tigercat – Palm Springs Air Museum 6
F-104 Starfighter Open Cockpit – Palm Springs Air Museum 5
P-47 Thunderbolt Open Cockpit – Palm Springs Air Museum 5
Supermarine Spitfire Mk XIV Open Cockpit – Palm Springs Air Museum 5
DARKSTAR & NASA’s X-38 ON VIEW THROUGH APRIL 25 – Palm Springs Air Mus 4
Darkstar on View – Photo and Video Opportunity – Palm Springs Air Muse 4
Open Cockpit Saturday’s: Supermarine Spitfire Mk XIV – Palm Springs Ai 4
P-40 Warhawk Open Cockpit – Palm Springs Air Museum 4

Meta Description Coverage

What a meta description is: the 1–2 sentence preview text that shows up under the page title in Google search results. It doesn't directly affect rankings, but it massively affects click-through rate — whether someone scrolling past 10 search results actually clicks your link or one of the others. Pages with no meta description force Google to auto-generate one from page text, which usually picks something unhelpful like a navigation menu or footer disclaimer.

Today on this site: only 85 of 956 pages have a meta description. That means 91% of the museum's pages are showing up in Google with whatever random snippet Google decided to grab — usually the first words of the page header or sidebar, not a compelling description of the page's actual content.

Best practices:

  • 120–160 characters. Google truncates around 155 on desktop, 120 on mobile.
  • Lead with what the page is about, not "Welcome to the Palm Springs Air Museum…". The user already knows it's a museum site — that's why they clicked.
  • Include the differentiator for that specific page (the aircraft, the event date, the honoree's name) so each result is distinct.
  • End with a soft action ("Reserve your seat", "See the exhibit", "Read the full story") to lift CTR.
  • Don't duplicate descriptions across pages. A duplicate meta description is just a slightly subtler version of duplicate titles.

How to fix in WordPress:

  1. Install or confirm an SEO plugin is active — Yoast SEO, Rank Math, or All in One SEO are the standard three. Each adds a "Meta Description" field beneath the post editor.
  2. For each post / page, write the 120–160 character description in that field. The plugin shows a live SERP preview as you type so you can see exactly how it'll look in Google.
  3. For 871 pages, doing this manually is brutal. Most SEO plugins now ship an AI-write button that generates a description from the post body in one click — review and tweak rather than write from scratch. Yoast's "AI title & description" feature and Rank Math's "Content AI" both do this.
  4. As a fallback, set a default template in the SEO plugin (e.g., %%excerpt%% for posts) so any future page without a hand-written description at least gets the post excerpt instead of a random page snippet.

Ultra-Long URL Slugs 36 pages over 60 chars

A "slug" is the last part of a URL — the human-readable bit after the last slash, like example.com/here-is-the-slug. Best practice: 3 to 5 words, under 60 characters. Short slugs are easier to share, remember, fit in social-media cards, and don't get truncated to nonsense in search results (Google shows about 75 visible characters of a URL — anything past that gets 'd out).

On this site, the worst offender is 181 characters in a single slug, basically the entire title of the post crammed into the URL. That's WordPress's default behavior when an editor publishes a long-titled post and never trims the auto-generated slug. The fix is to manually edit the slug field in the WP post editor before publishing — or after, with a redirect added so old links still work.

5100+ chars (catastrophic)
780–100 chars
2460–80 chars
33540–60 chars (acceptable)
585under 40 chars (good)

Worst Offenders

URL Slug Length
/student-scholarship-program-for-airline-pilot-credentials-initiated-by-palm-springs-air-museum-and-the-air-space-forces-association-ps-chapter-in-partnership-with-socal-pilot-center/ 181
/programs/from-the-front-lines-to-the-c-47-skytrains-an-eyewitness-account-of-caring-for-the-wounded-by-the-111th-evacuation-hospital-in-wwii/ 131
/opening-of-archival-displays-to-accompany-walt-disneys-grumman-gulfstream-i-airplane-at-the-palm-springs-air-museum/ 115
/tag/skip-navigation-palm-springs-air-museum-create-avatar-image-blackburn-b-24-skua-warbird-wednesday-episode-256/ 109
/programs/special-under-the-cowling-presentation-featuring-two-world-war-ii-distinguished-flying-cross-dfc-pilots/ 103
/programs/misconceptions-about-the-tuskegee-airmen-refuting-myths-about-americas-first-black-military-pilots/ 98
/programs/japan-strikes-at-dawn-defeat-at-pearl-harbor-the-philippines-and-singapore-conspiracy-or-foul-up/ 96
/walt-disneys-grumman-gulfstream-i-airplane-returns-to-palm-springs-straight-from-d23-expo-2022/ 94
/the-quest-for-excellence-isntps-rotary-wing-aviation-fleet-pt-5-warbird-wednesday-episode-143/ 93
/the-quest-for-excellence-u-s-naval-test-pilot-school-part-3-warbird-wednesday-episode-141/ 89
/the-quest-for-excellence-usntps-glider-beaver-otter-t6-pt-4-warbird-wednesday-episode-142/ 89
/tag/skip-navigation-search-create-avatar-image-curtiss-sb2c-warbird-wednesday-episode-257/ 85

Fix: in WP Admin → Posts/Pages, open each offender, click the URL slug field in the right sidebar, shorten to 3–5 keywords, and save. WordPress will offer to add a redirect from the old slug — accept it so existing inbound links keep working.

WP Taxonomy Pages 36 pages (7 categories + 29 tags)

What "taxonomy" means in WordPress: when you publish a post, WordPress auto-generates a separate URL for every category and every tag assigned to that post. So if a Warbird Wednesday episode about a P-51 is tagged p-51, WordPress quietly creates the URL /tag/p-51/ as its own indexable page. That page contains just the one post that uses the tag, plus the same site header, navigation, and footer as every other page.

What's happening on this site: the museum has accumulated 36 taxonomy pages — 7 category pages (/category/warbird-wednesday/, /category/news/, etc.) and 29 tag pages, almost all of which are per-aircraft or per-episode tags from Warbird Wednesday posts (/tag/heinkel/, /tag/p-51/, /tag/petlyakov-pe-2/, …).

Why this is a problem:

  • Thin content. Most tag pages list a single post — Google's quality guidelines specifically flag "thin content with no added value" and may suppress these pages from search results.
  • Near-duplicates of each other. A page at /tag/p-51/ showing one Warbird Wednesday episode looks 95% identical to a page at /tag/heinkel/ showing one different Warbird Wednesday episode — same template, same sidebar, just a different middle item. Search engines see this as duplicate content.
  • Internal-link spam. Each post body shows a "Tags:" row that links to its own tag pages, creating an explosion of low-value internal links that dilute the authority of the museum's real content pages.
  • Crawl-budget waste. Google has to crawl and re-crawl all 36 of these pages even though they're nearly empty, leaving less budget for the pages that actually matter.

How to fix in WordPress (pick one):

  1. Set tag and tag-archive pages to "noindex" in your SEO plugin (Yoast SEO → Search Appearance → Taxonomies → Tags → "Show tags in search results: No"; Rank Math → Titles & Meta → Tags → "Index: noindex"). The pages still exist for internal navigation, but Google ignores them. This is the recommended fix — minimum effort, eliminates the SEO drag immediately.
  2. Stop using tags entirely. Remove the tag widget from post templates, delete the existing tags, and rely only on categories. The 7 category pages (/category/warbird-wednesday/ etc.) are legitimate topical hubs and worth keeping.
  3. Make every tag page unique. Write a 100–200 word intro paragraph for each of the 29 tag pages so each has its own distinct content. This gives them real value but requires a lot of editorial work for marginal SEO benefit. Not recommended at this scale.

Category Pages (7)

These are legitimate topical hubs — keep them, but consider writing a short intro paragraph on each one explaining the series.

  • /category/expedition-amelia-2025/
  • /category/news/
  • /category/top-secret-heroes-of-modern-tech/
  • /category/tuskegee-tuesday/
  • /category/voices-of-valor/
  • /category/warbird-wednesday/
  • /category/women-in-aviation/

Tag Pages (29)

These are the auto-generated thin-content pages. Set them to noindex via your SEO plugin.

  • /tag/ar-2-warbird-wednesday-episode-262/
  • /tag/bartini-beriev-vva-14-warbird-wednesday-episode-270/
  • /tag/beechcraft-t-6-texan-ii/
  • /tag/emb-312/
  • /tag/f2y-sea-dart-warbird-wednesday-episode-263/
  • /tag/fiat-g-80/
  • /tag/heinkel/
  • /tag/heinkelhe219/
  • /tag/henschel-hs-132/
  • /tag/l-29-delfin/
  • /tag/loire-nieuport-ln-401/
  • /tag/me-p-1109-warbird-wednesday-episode-268/
  • /tag/north-american-a-36-warbird-wednesday-episode-261/
  • /tag/p-51/
  • /tag/petlyakov-pe-2/
  • /tag/pilots/
  • /tag/red-tails/
  • /tag/skip-navigation-palm-springs-air-museum-create-avatar-image-blackburn-b-24-skua-warbird-wednesday-episode-256/
  • /tag/skip-navigation-search-create-avatar-image-curtiss-sb2c-warbird-wednesday-episode-257/
  • /tag/skip-navigation-search-create-avatar-image-goodyear-inflatoplane/
  • /tag/t-38-talon/
  • /tag/t-38-talon-warbird-wednesday-episode-251/
  • /tag/t-7-red-hawk/
  • /tag/tuskegee/
  • /tag/warbird-wednesday/
  • /tag/warbirdwednesday/
  • /tag/warbirdwednesday-vulteea31/
  • /tag/world-war-ii/
  • /tag/wwii/

Title & Meta Recommendations

  • Add meta descriptions to all 871 missing pages. This is the highest-priority SEO fix. Use distinct 120-160 character descriptions per page. Batch-generate using post content where available.
  • Shorten 535 titles to under 60 characters. Long titles are truncated in search results. WordPress theme title template likely appending " – Palm Springs Air Museum" to every title (adding ~30 chars).
  • Deduplicate Open Cockpit event titles. Add the date or sequence number to each event title. 19 pages share the same F-104 Starfighter title.
  • Fix the XML sitemap.

    A sitemap is the single file that tells Google, "here is the full list of every page on my website." Without one, Google has to discover pages by clicking links from the homepage outward — that's slow, it's unreliable, and pages buried more than a few clicks deep often go un-indexed for months. For a site with 956 live pages (event listings, Warbird Wednesday profiles, gala honoree stories, blog posts going back years) that means a large share of the museum's content is invisible in search results. Restoring the sitemap is the highest-leverage SEO fix on this list because every page below the homepage benefits from it — not just one or two.

    What's actually wrong: https://palmspringsairmuseum.org/wp-sitemap.xml currently returns HTTP 200 OK, but with Content-Type: text/html — the server is sending the site's homepage HTML instead of an XML document. Google treats that as a "soft 404" and refuses to recognize it as a sitemap. Either re-enable WordPress's built-in sitemap (something on the site is intercepting that URL with the page template) or install an SEO plugin (Yoast, Rank Math) that emits proper application/xml, then submit the working URL in Google Search Console.