Crawl Health
What works, what's broken, and what's getting in the way
Key Findings — Plain English
- Mobile "Largest Contentful Paint" is 24 seconds. (Not a typo — twenty-four seconds.)
Translation: on a typical smartphone, the main hero image and heading take a full
24 seconds to finish loading after a visitor taps the link. For
context, the average visitor abandons a page after 3 seconds. By 10 seconds the
page is functionally lost. By 24 seconds, the bounce rate is near total — almost
every mobile visitor is gone before they ever see the museum's content. Mobile First
Contentful Paint (the very first sign of life on screen) is also 14 seconds,
which means even the loading-spinner stage takes longer than most visitors will wait.
This is by far the most damaging finding in the audit.
The culprits: large unoptimized hero images, render-blocking JavaScript and CSS files, and heavy third-party scripts (analytics, chat widgets, embedded video players) all running before content can paint. The fix sequence: compress and properly size the hero images, defer non-critical JavaScript, audit the third-party script list and remove anything not actively used. - Desktop "Total Blocking Time" is 930 ms. Translation: when a visitor lands on the homepage on a desktop browser, the page sits frozen for almost a full second — they can see content, but clicks and taps do nothing. Almost always caused by heavy JavaScript: tracking pixels, ad networks, chat widgets, embedded video players. The fix is to defer or remove non-essential scripts and use lazy-loading for embeds.
- Server Response Time is 10 ms. Translation: the actual web server is fast — Cloudflare's CDN delivers the first byte of HTML in 1/100th of a second. Whatever's slowing the page is happening AFTER that first byte arrives, in the browser. So the fix isn't a beefier server — it's trimming the JavaScript and image weight.
- Cumulative Layout Shift is near zero. Translation: nothing on the page jumps around as it loads. The visitor doesn't try to tap a button only to have an ad appear and bump it out of the way. This is one thing the site already does right.
Crawl Context
The headline numbers from the full-site crawl. Each one is a count of instances across every page on the site — the same issue can show up on many pages.
rel="canonical" tag on each duplicate that points to the version you want
indexed.
<title>. In search results they all look
identical, so Google can't tell them apart and visitors don't know which to click.
Fix: give each page a unique SEO title in WP Admin. For repeating events,
append the date or year ("Open Cockpit Saturday — May 2026").
http:// reference inside <img>,
<script>, and <link> tags to https://. A
search-replace plugin (Better Search Replace) sweeps the entire database in one pass.
alt attribute. Screen readers can't describe them to
visually-impaired visitors, and Google Image search has nothing to read for ranking.
Fix: in WP Media Library, fill in the "Alternative Text" field with a short,
accurate description for every image. Purely decorative graphics can use empty
alt="".
async non-critical scripts, inline the small slice
of CSS needed for the top of the page, and lazy-load the rest. A performance plugin
(WP Rocket, Perfmatters, FlyingPress) handles most of this automatically.
Broken & Blocked Pages 66
Out of 1,037 pages we tried to load on the site, 66 didn't load successfully. We split them into two groups, because they fail for very different reasons.
8 Broken Links (HTTP 404) — Page Not Found
These are dead links. A visitor (or Google) clicked through and landed on a "page does not exist" message. Each one is either a typo, a page that was deleted without forwarding to its replacement, or an old link still pointing at something that no longer lives on the site.
What to do: for every dead URL, either bring the page back, redirect it to the most relevant existing page, or remove the broken link from wherever it's still being used.
Broken URLs
| Broken URL▲ | Status↕ | Where it's linked from↕ |
|---|---|---|
| /4/ | 404 | "Likely an XML-sitemap or legacy-redirect orphan. Have the web team grep the WordPress database / redirect plugin for any rewrite rule producing a bare /4/ path." on (no inbound link found in homepage, main nav, paginated archives, or shop) |
| /5/ | 404 | "Likely an XML-sitemap or legacy-redirect orphan. Have the web team grep the WordPress database / redirect plugin for any rewrite rule producing a bare /5/ path." on (no inbound link found in homepage, main nav, paginated archives, or shop) |
| /7/ | 404 | "Likely an XML-sitemap or legacy-redirect orphan. Have the web team grep the WordPress database / redirect plugin for any rewrite rule producing a bare /7/ path." on (no inbound link found in homepage, main nav, paginated archives, or shop) |
| /warbird-rides-two/ | 404 | "BROKEN REDIRECT — every visitor clicking "Warbird Rides" hits this dead end. /warbird-rides/ is linked sitewide and 301-forwards to /warbird-rides-two/, which is 404. Fix the redirect target or restore the page." on /warbird-rides/ (linked from homepage + main nav, then 301-redirected here) |
| /warbird-rides/).%C2%A0Ride | 404 | "ride guidelines" on /help-cathedral-city-flood-victims/ |
| https://shop.palmspringsairmuseum.org/product/props-hops-t-shirt/ | 404 | "PRE-ORDER NOW!" on /props-and-hops-craft-beer-festival/ |
| https://shop.palmspringsairmuseum.org/warbird-ride-certificates/ | 404 | "Warbird Ride Certificates" on shop:/ (shop homepage) • "Warbird Ride Certificates" on shop:/product-category/warbird-ride-certificates/ |
| https://shop.palmspringsairmuseum.org/wp-content/uploads/2025/10/Mem-Belle-Hawai | 404 | "Likely embedded as a product photo on a Memphis Belle Hawaiian shirt page that has since been removed. The image file itself is gone — either restore the file or remove the embed." on (image asset, not a clickable link) |
58 Blocked Pages (HTTP 403) — Blocked by Site Security
The site's own security service (a Web Application Firewall, or WAF — usually Cloudflare or a WordPress security plugin like Wordfence) refused to load these pages during the audit. It looked at our request, decided it wasn't sure if we were a real person or a bot, and turned us away with a "403 Forbidden" response.
The pages themselves are almost certainly fine — they exist, they have content, a normal visitor in a browser can probably reach them. The problem is that the security service is being too aggressive: it's blocking legitimate visitors along with the bots it's actually trying to stop. Specifically:
- Google's crawler can hit the same wall. Googlebot identifies itself as a bot — and an over-aggressive WAF will block it just like it blocked us. When that happens, Google can't read these pages, which means they slowly drop out of search results.
- Real visitors on unusual networks get blocked too. People on VPNs, corporate networks, mobile carriers in other countries, or older browsers all look slightly "off" to a WAF. Each one represents a real person who tried to visit the museum's website and saw a "Forbidden" error instead.
- The pages still cost crawl budget. Google keeps trying these URLs over and over because nothing tells it to stop, but never gets through.
What to do — concretely:
- Identify which security service is doing the blocking. The most common culprits are Cloudflare's "Bot Fight Mode" or "Super Bot Fight Mode" (managed in the Cloudflare dashboard under Security → Bots), and WordPress security plugins like Wordfence, Sucuri, or iThemes Security (managed in WP Admin).
- Allow-list the major search-engine crawlers. Cloudflare has a built-in "Verified Bots" exception — turn it on. In Wordfence, add Googlebot, Bingbot, and DuckDuckBot to the allow list under Wordfence → Blocking. Verify by checking Google Search Console afterwards: Coverage report should show fewer "Blocked due to other 4xx issue" pages.
- Lower the bot-detection sensitivity on standard pages (the
/programs/,/blog/, etc. paths visitors actually browse). Keep aggressive blocking only on sensitive endpoints like/wp-login.phpand/wp-admin/. - Re-audit in 7 days. Once the rules are loosened, run this audit again. The 403 count should drop substantially — ideally to zero, with only genuinely bad bots (scrapers, vulnerability scanners) still being blocked.
Blocked URLs
| URL▲ | Status↕ | Issue↕ |
|---|---|---|
| /9/ | 403 | Blocked by site security |
| /darkstar-rising-experience/ | 403 | Blocked by site security |
| /programs/11th-annual-props-hops-craft-beer-festival/ | 403 | Blocked by site security |
| /programs/annual-gala-air-museum-closed/ | 403 | Blocked by site security |
| /programs/combat-contrails-vietnam/ | 403 | Blocked by site security |
| /programs/darkstar-rising-experience-2-24-2024/ | 403 | Blocked by site security |
| /programs/darkstar-rising-experience/ | 403 | Blocked by site security |
| /programs/edwards-afbusaf-test-pilot-university/ | 403 | Blocked by site security |
| /programs/keep-calm-carry-on-a-brits-experience-of-wwii-2/ | 403 | Blocked by site security |
| /programs/midway-americas-turning-point-by-michael-carra/ | 403 | Blocked by site security |
| /programs/mission-91-the-bomber-raid-on-stuttgart-germany/ | 403 | Blocked by site security |
| /programs/open-cockpit-saturdays-f4u-corsair-4/ | 403 | Blocked by site security |
| /programs/open-cockpit-saturdays-p-40-warhawk-8/ | 403 | Blocked by site security |
| /programs/palm-springs-air-museum-gala-2024/ | 403 | Blocked by site security |
| /programs/pearl-harbor-the-sinking-of-the-u-s-s-oklahoma/ | 403 | Blocked by site security |
| /programs/saturday-open-cockpit-supermarine-spitfire-mk-xiv-4/ | 403 | Blocked by site security |
| /programs/snowtopia-5/ | 403 | Blocked by site security |
| /programs/snowtopia-8/ | 403 | Blocked by site security |
| /programs/snowtopia-9/ | 403 | Blocked by site security |
| /programs/t-34-mentor-fly-in/ | 403 | Blocked by site security |
| /programs/thanksgiving-day-air-museum-closed/ | 403 | Blocked by site security |
| /programs/the-wartime-master-of-suspense-hitchcock-and-the-second-world-war/ | 403 | Blocked by site security |
| /programs/u-boat-war-tragedy-and-redemption-in-the-north-atlantic-1939-1945/ | 403 | Blocked by site security |
| /programs/wwii-aircraft-of-the-aleutians/ | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/?categories=blood-drive | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/25384 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/26899 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/27481 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/28676 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29165 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29560 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29908 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29934 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29937 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29940 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29945 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29948 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29951 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29954 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29957 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29960 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29966 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/29975 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/30868 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/30871 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/30873 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31338 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31341 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31343 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31345 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31759 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31761 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/31763 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/32373 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/32555 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/32559 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/33508 | 403 | Blocked by site security |
| /wp-json/tribe/events/v1/events/34892 | 403 | Blocked by site security |
15 Redirect Chains
A redirect is when one address automatically forwards visitors to a different address. Some are routine and harmless (https/www normalization). Others mean a real page got renamed and old links still float around. One of them, on this site, is broken.
We've grouped each redirect on the table below by what it actually is, so the web team can
knock them out one category at a time. Where: almost all redirects on a
WordPress site live in either WP Admin → Tools → Redirection (the most popular
plugin) or in the server's .htaccess file. Ask the developer which one is in use
before editing.
| Change this URL from...↕ | To this URL↕ | What kind▲ | Internal links still using the old URL↕ |
|---|---|---|---|
| /warbird-rides/ | /warbird-rides-two/ | BROKEN — fix now | "Warbird Rides" on 1846 pages • "Book a Flight" on 4 pages |
| http://shop.palmspringsairmuseum.org/product/props-hops | shop:/product/props-hops-t-shirt/ | Moved to shop subdomain | (none found in our sample) |
| /product/donation/ | shop:/product/donation/ | Moved to shop subdomain | "Donate" on 1844 pages • "DONATE" on 4 pages • "HELP KEEP HISTORY ALIVE" on 1 page • "DONATE TO HELP FUTURE RESTORATION PROJECTS" on 1 page • "HELP US KEEP MOVIE MEMPHIS BELLE FLYING!" on 1 page |
| /contact/contact-info/ | /contact-info/ | Old URL → renamed page | "Contact Us" on 1846 pages |
| /visit/admission/ | /admission/ | Old URL → renamed page | "Air Museum admission" on 2 pages |
| http://www.palmspringsairmuseum.org/ | https://www.palmspringsairmuseum.org/ | Protocol / host normalization | "www.PalmSpringsAirMuseum.org" on 1 page |
| shop:/store | shop:/store/ | Protocol / host normalization | (none found in our sample) |
| https://www.palmspringsairmuseum.org/ | / | Protocol / host normalization | (none found in our sample) |
| shop:/ | shop:/store | Shop homepage hop | "Home" on 1846 pages • "Palm Springs Air Museum" on 2 pages |
| shop:/product/educator | shop:/product/educator-membership/ | Typo handler | "Join Now" on 1 page |
| shop:/product/educator/ | shop:/product/educator-membership/ | Typo handler | "Educator Membership" on 1844 pages • "Join Now!" on 1 page |
| shop:/product/individual/ | shop:/product/individual-membership/ | Typo handler | "Join Now" on 1 page |
| /2/ | /2023-gala-honoree-eileen-m-collins/ | Vanity shortcut | (none found in our sample) |
| /3/ | /332nd-ground-crew/ | Vanity shortcut | (none found in our sample) |
| /8/ | /programs/80th-anniversary-of-d-day/ | Vanity shortcut | (none found in our sample) |
How to fix each kind
The site's main nav, footer, and 1,846 individual pages all link to
/warbird-rides/. That URL currently 301-redirects to
/warbird-rides-two/, which is a 404 (broken link). Every visitor and every search engine
clicking "Warbird Rides" anywhere on the site lands on a "page does not exist" message.
Recommended fix (simplest):
- Restore
/warbird-rides/as a real page. InWP Admin → Tools → Redirection, find the rule whose source is/warbird-rides/and either delete it or disable it. Then inWP Admin → Pages, create (or restore from trash) a page with the slugwarbird-ridesusing the real Warbird Rides content. Done — all 1,846 existing internal links start working immediately, no menu edits needed, no SEO equity transferred to a new URL.
Alternative (only if the page genuinely needs to live at a different URL):
-
Change the redirect target from
/warbird-rides-two/to whatever real, working URL the page now lives at (probably/programs/warbird-rides-experience/or similar). This is more fragile because every internal link will then bounce through a redirect, costing a small amount of SEO value and a fraction of a second of load time per click.
Either way, also delete or update the orphan /warbird-rides-two/ rule itself —
there's no reason to keep a redirect target nobody can reach.
Examples: /2/ → /2023-gala-honoree-eileen-m-collins/,
/3/ → /332nd-ground-crew/, /8/ → /programs/80th-anniversary-of-d-day/.
Someone set up bare numeric URLs as easy-to-share shortcuts that forward to the real page.
These are fine to leave alone — they don't hurt anything and they let old printed materials / postcards / business cards keep working.
BUT this is the same plugin that produced the /4/,
/5/, /7/ 404 (broken link) errors. Those numeric shortcuts had their target
pages deleted but the redirect rules were never cleaned up. In
WP Admin → Tools → Redirection, search for source URLs /4/,
/5/, /7/ and either point them at a real, related page or
delete the rules entirely.
Examples: /contact/contact-info/ → /contact-info/,
/visit/admission/ → /admission/. The page got renamed (or moved up a level)
and a redirect was added so old links keep working.
What to do:
- The redirect itself is fine — leave it in place so external sites and old bookmarks keep working.
-
But on this site, the menu, footer, and any in-page links should point directly
at the final URL (e.g.,
/contact-info/) — not at the old one. Each internal link going through a redirect is a small SEO leak and a minor speed hit. -
How to find them: search the site's theme files / WordPress posts for the old slug
(e.g.,
contact/contact-info) and replace with the new slug.
Examples: /product/donation/ → shop:/product/donation/. A page that used to live
on the main museum site has been moved to shop.palmspringsairmuseum.org.
What to do:
- The redirect itself is fine — leave it in place.
-
Update any internal links on the main site that still point at the old
/product/...path. They should link directly athttps://shop.palmspringsairmuseum.org/product/...so visitors don't bounce through a redirect.
Examples: shop:/product/educator/ → shop:/product/educator-membership/,
shop:/product/individual/ → shop:/product/individual-membership/. Someone set up
shorter aliases that catch common typos.
What to do:
- Leave these alone — they're helpful safety nets.
-
Just verify the shop's own menu and product links use the FULL slug
(
educator-membership, noteducator) so the site itself never triggers the redirect.
shop:/ → shop:/store, and shop:/store in turn redirects to
shop:/store/. That's a two-hop chain for anyone landing on the bare shop
domain.
What to do:
-
Edit the
shop:/redirect rule to point directly at the final URL (shop:/store/with the trailing slash) — eliminate the middle hop. - Or simpler: configure the shop subdomain so its homepage IS the store page (no redirect at all).
Examples: http://www. → https://www., https://www. → / (no www),
shop:/store → shop:/store/ (adds trailing slash).
These are good and expected. Every modern website has rules like these to
force a single canonical URL. They live in server config (.htaccess on Apache
or a Cloudflare page rule) — do not remove them.
The only related cleanup: make sure the site's own internal links use the canonical form
(https://palmspringsairmuseum.org/, no www.) so the redirect
never fires for legitimate visitors.
Content Charts
Visual breakdowns of every page on the site, the URL structure, and the headline title / description metrics.
Full Site Content Map — 4 Levels Deep
All 956 live pages flowing left-to-right through the site hierarchy. Programs, Blog, and Shop each drill down to their full content breakdown — including all 226 shop pages by category, all 311 program pages including Open Cockpit aircraft, and all 380 blog posts broken out by Warbird Wednesday era and Gala Honoree class.
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
Meta Description Coverage
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:
- 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.
- 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.
- 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.
-
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.
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):
- 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.
- 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. - 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.
- 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.xmlcurrently returns HTTP 200 OK, but withContent-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 properapplication/xml, then submit the working URL in Google Search Console. - 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.