2026-09-16Health score 67 / 100491 sitemap URLs checkedPublic data only. No Search Console access.
Nick Gray
Prepared by Nick Gray with a team of AI research agents. Five
specialists crawled the site in parallel, a lead agent
cross-checked and hand-verified the findings, and Nick's own
notes are in the yellow boxes.
Chris, your site is genuinely well built. Podpage gets a lot right,
the design is lovely, and Google is not flagging anything. The
problem is smaller and more annoying than a broken site: a few
config gaps and template bugs quietly cap what all that work can
earn. The About link on all 491 pages takes a detour. Your category
page titles print your brand name twice. Your transcripts feature is
built, installed, and switched off. Fix ten things and the
foundation starts paying you back.
Seven categories, weighted. Nothing here is on fire. Two categories
are doing the dragging.
Content quality and E-E-A-T73 · weight 23%
Real credentials and a 4.98 star rating, but show notes run
454 to 920 words and there are no transcripts.
Technical SEO68 · weight 22%
Clean sitemap, strong security, server-rendered HTML. Held
down by canonicals that echo UTM tags and the About page
split.
On-page SEO62 · weight 20%
Category title bug, 6 placeholder meta descriptions, 4 H1 tags
on newsletter posts, nav links leaving the domain.
AI search readiness71 · weight 10%
Best-practice robots.txt for AI bots, an llms.txt file, and
clean Markdown on request. Older episodes lack citable blocks.
Schema70 · weight 10%
A mature @graph. Missing transcript and author on
PodcastEpisode. Your Person name is "Hi, I'm Chris Hutchins
π".
Performance48 · weight 10%
LCP and INP pass. But server response time is up 46% in 25
weeks and blog mobile blocking time hits 10.7 seconds.
Images72 · weight 5%
WebP everywhere and perfect social images. Subscribe icons are
served at 960px wide for a 24px display.
491URLs in your sitemap, 25 of 25 sampled came back clean
4.98β Podcast rating in your schema, from 489 ratings
0Episodes with a transcript, on a platform that has the
feature
5Redirect hops on your "Credit Cards" nav link
π―
The 10 things to do first
Ranked by what they return for what they cost. Four of them are
under 30 minutes. Six of the ten you can do yourself today.
Fix the About link
Your nav and footer "About" link, on all 491 pages, points at
/custom-about/. That page loads, shows
almost nothing, then fires a JavaScript redirect to
allthehacks.com/about/, which 301s back to
www.chrishutchins.com/about/. Point the link at
/about/ and 301
/custom-about/ into it. Same pattern
on /custom-contact/. Every page's most
important link about you is taking a detour through another
domain.
CriticalChris15 min
Fix the category page titles
All three /categories/* pages print "|
All the Hacks with Chris Hutchins" twice in the title tag, so
they run 92 to 103 characters and get cut off in search results.
These are three of your best hub pages and they look broken in
the SERP.
CriticalChris or Podpage10 min
Turn on transcripts
Every episode page already ships an empty Transcript tab, and
your own llms.txt documents a
transcript.txt endpoint that currently
404s. The feature is installed and switched off. Start with the
top 20 to 30 evergreen episodes and clean up the proper nouns
before publishing. Full reasoning is in the content section
below.
HighChrisConfig, then editing
Retrofit Key Takeaways and FAQ blocks to the back catalog
Both 2026 episodes we sampled have them. None of the four 2021
to 2024 episodes do. That puts roughly 290 of about 315 episodes
on the old format. The winning format already exists on your
site. It just never went backwards.
HighChris or a VAEditing pass
Write real meta descriptions
Six pages still carry Podpage's placeholder text, like "Contact
page for All the Hacks with Chris Hutchins". Those are
/about/,
/products/,
/contact/,
/newsletter/,
/sponsors/ and
/categories/. Dashboard, Settings, SEO
Metadata. This is free click-through rate.
HighChris30 min
Send Podpage three support tickets about speed
One: your HTML is not cached at the edge,
cf-cache-status reads DYNAMIC on every
page and server response time went from 908ms to 1,380ms in 25
weeks. Two: subscribe-button icons are served at 960px wide for
a 24px display, about 427KB wasted per homepage load. Three: the
YouTube embed on episode pages loads roughly 1MB before anyone
presses play. We wrote the ticket text for you below.
HighPodpage support3 tickets
Fix your own JavaScript error
chrishutchins.github.io/podpagejs.js
throws "Cannot read properties of null (reading
'addEventListener')" on your Home, Episode and Products pages.
It is your file in your own GitHub repo. Add a null check before
the listener. This is the one speed-adjacent item that needs
nobody's permission.
MediumChris5 min
Decide what the Products page is
/products/ is set to noindex and
nofollow, and the Podpage content block on it is empty. The
screenshot is below. It is also listed in your sitemap despite
the noindex, which is a small contradiction. Either fill it in
or take it out of the nav and the sitemap.
MediumChris20 min
Stop the nav leaking to the other domain, and collapse the
redirect chains
Your "Credit Cards" nav item goes to
allthehacks.com/cardsnav and takes 5
hops to land. /deals/ goes through
bit.ly and takes 4. Every
allthehacks.com path takes 2. Point
links at final URLs, and make allthehacks.com redirect in one
hop. Your SiteNavigationElement schema currently tells Google
your nav points off-domain.
MediumChris30 min
Build three ranking assets out of content you already have
You rank in the top 10 for zero of the six non-branded money
queries we tested. Those results want guides and tables, not
show notes. Turn
/world-of-hyatt-deep-dive/ (2,781
words, zero tables) into a status-tier table page with the
episode underneath. Build a
/credit-card-transfer-partners/ matrix
hub. Publish a dated "what are points worth" valuation table and
refresh it quarterly.
MediumChris or a writerContent project
β
What you are doing right
Say this part first, because most of the list below is unusual.
Plenty of sites we audit have none of it.
The design. The cartoons, the neon green highlight
system, the whole thing is memorable and on brand.
Server-rendered HTML. Your content is in the page
source, not assembled by JavaScript. That is the single best
thing a site can do for crawlers.
Security is strong. HTTPS, HSTS, a real content
security policy, HTTP/2 and HTTP/3.
A clean sitemap. 491 URLs. We pulled 25 at random and
all 25 returned a clean 200 with a self-referencing canonical.
Schema is unusually complete. Organization, WebSite,
PodcastSeries with a real 4.98 star rating from 489 ratings,
PodcastEpisode, VideoObject, BlogPosting and BreadcrumbList,
all tied together in one graph.
Your AI crawler policy is best practice. OAI-SearchBot,
ChatGPT-User, PerplexityBot, ClaudeBot and Claude-SearchBot
are all allowed with no delay. You have an llms.txt. Podpage
even serves clean Markdown when a bot asks for it.
Social images are automated and correct. Exactly 1200
by 630, per page, with the page title baked in. Full favicon
set. Fonts preloaded with font-display swap.
2026 episodes already use the winning format. Key
Takeaways, an FAQ block, chapters and a video.
Old episodes are 3 clicks from home, because your
episode list links straight to page 12.
Google is not flagging you. Field LCP is 1.99s and INP
is 53ms, both rated Good.
Affiliate disclosure is clear and on every page. That
is a real trust signal.
The homepage on a phone. The type, the green block and the pig do
a lot of work here. Nothing in this audit asks you to change any
of it.
π€
robots.txt: who you let in
Your robots.txt sorts crawlers into three groups. The first two are
good news. The third one is worth a decision.
The left column is the one that matters most and it is exactly
right. Every search engine and every AI search crawler is welcome
with no throttling. Most sites we look at have accidentally blocked
at least one of these. You have not.
Nick's note
You allow a lot, which is good. But you also block Ahrefs,
Semrush, Amazon and a few others. I understand why, but I want to
make sure that is intentional and not a Podpage default.
What blocking those costs you, in practice: your own team cannot
pull backlink or rank data for your domain through Ahrefs or
Semrush, and neither can a sponsor doing due diligence before a
deal. They see a hollow profile. Blocking Amazonbot also cuts Alexa
and Amazon shopping signals. If none of that matters to you, leaving
it is a fine, free choice. If it does, one line of robots.txt
changes it. Our read: this is almost certainly a stock Podpage
template and nobody ever chose it.
πΊοΈ
Sitemap and crawlability
One flat sitemap, 491 URLs, every one with a lastmod date, no
priority or changefreq clutter. That is how it should look. We
pulled 25 URLs at random and every one returned a clean 200 with no
redirect and a self-referencing canonical.
Section
URLs
Note
Root level, mostly episodes plus tool pages
312
Includes /about/, /custom-about/, /episodes/, /sponsors/
/blog/
169
Newsletter digests and evergreen posts
/categories/
4
Three categories plus the index
/people/chris-hutchins/
1
Your Person entity lives here, and /about/ does not link to
it
/products/
1
Listed despite carrying noindex, nofollow
Total
491
313 of 491 URLs have not been touched in over a year. Separately,
144 pages all share the single date 2024-07-26, which is one bulk
edit rather than 144 updates. There is no refresh cadence running
today.
The canonical tag echoes your tracking parameters
This is the highest-risk technical finding and it is not visible
from the dashboard. When someone opens
chrishutchins.com/?utm_source=newsletter&utm_medium=email, the page's canonical tag points at that exact URL, UTM tags and
all, instead of collapsing to the clean address. We confirmed the
same behaviour on an episode page with
?utm_source=x. You share tracked links
constantly, from the newsletter, from social, from show notes. Every
distinct combination can become its own canonical identity. Ask
Podpage whether canonical generation can strip
utm_*,
fbclid and
gclid server side. It is not fixable from
your admin panel.
Nick's note
You have a ton of pages in the sitemap. We do not have access to
your Google Search Console, so we could only audit from the
outside. If you give us read-only access, we can tell you which of
these 491 pages actually earn impressions and which ones to fix
first.
π
The About link problem
This is the one we would fix before anything else. It is on every
page of the site, it involves your most important entity page, and
it takes about fifteen minutes.
Start"About" link in your nav and footer, on all 491 pages
β click
Hop 1www.chrishutchins.com/custom-about/ HTTP 200, thin page, then a JavaScript
window.location.replace()
β
JavaScript redirect, invisible to crawlers that do not
render
Hop 2www.allthehacks.com/about/ 301, on a different domain
β 301
Destinationwww.chrishutchins.com/about/ HTTP
200, the real bio
Both /custom-about/ and
/about/ return 200 directly, both are
self-canonical, both are in your sitemap, and neither is noindexed.
So you have two live About pages, and the one every internal link
points at is the emptier of the two (1,507 characters of visible
text versus 2,137). The fix is two steps: repoint the nav and footer
link at /about/, then 301
/custom-about/ into it, or just delete the
custom page. Then do the same thing for
/custom-contact/ and
/contact/.
Nick's note
When I click About in your footer it goes to custom-about and then
redirects to the real About page. That should be one link to one
page.
Two more chains worth collapsing
Nav "Credit Cards", 5 hops
allthehacks.com/cardsnav
chrishutchins.com/cardsnav
www.chrishutchins.com/cardsnav
.../cardsnav/
.../p/cards/?redirect_from=podpage
.../cards/?redirect_from=podpage 200
"/deals/", 4 hops
/deals/ 302
bit.ly/3YrWC64?redirect_from=podpage
301
chrishutchins.com/sponsors 301
www.chrishutchins.com/sponsors 301
www.chrishutchins.com/sponsors/ 200
Every hop costs a little crawl budget and a little link equity. None
of these are fatal on their own. All of them are one link edit away
from being zero.
β‘
Site speed: the page paints, then it hangs
Nick's note
The site feels a little slow to me. The data agrees, but not in
the way I expected: the page paints fine and then hangs. Most of
the fixes are Podpage tickets, not your work.
Google is not going to punish you for this today. Your field LCP is
1,995ms and your INP is 53ms, both rated Good. What the lab data
shows is different: the page appears quickly and then freezes for a
while before it will respond to a tap. That is the feeling, and here
is where it comes from.
Lab scores, four page types
Page
Mobile
Desktop
Mobile TBT
Mobile LCP
Weight
Home
84
77
238ms
3.5s
2,039 KiB
Episode
60
52
1,228ms
4.0s
2,059 KiB
Blog
56
70
10,774ms
3.1s
984 KiB
Products
67
72
1,040ms
3.5s
962 KiB
Mobile Lighthouse runs use a throttled CPU, so treat the absolute
blocking-time numbers as pessimistic. The ranking between pages is
real.
Total blocking time, where the freeze lives
Blog, mobile10,774ms
Episode, mobile1,228ms
Products, mobile1,040ms
Home, mobile238ms
On the blog template, four scripts fight for the main thread at
load: Podpage's own bundle costs 4,840ms of scripting, Google Tag
Manager 1,601ms, the Facebook signals config script 1,461ms and
fbevents.js another 1,293ms. Deferring Facebook Pixel and GTM until
after first paint is the single biggest win available on this page.
Server response time is getting worse
First contentful paint rose 33.7% and largest contentful paint
rose 30.7% over the same window. Interaction delay and layout
shift both improved. The metrics that got worse are the ones tied
to hosting, not to your content.
The cause is visible in the headers:
cf-cache-status: DYNAMIC on every page we
tested. Cloudflare sits in front of your site but is not caching the
HTML, so every visitor anywhere in the world waits for a fresh
response from the origin. The blog template is worst, at 2,015ms
with only 14.1% of visits rated Good. Blog and Products pages also
send Vary: Cookie because of a CSRF
cookie, which would defeat caching even if the cache headers allowed
it.
Layout shift: desktop is the problem, not mobile
Desktop
0.34 75th percentile. Only 46.4% of visits rated Good.
Mobile
0.01 75th percentile. 85.0% of visits rated Good.
That gap is unusual and it means the shift comes from something a
single lab run does not reliably reproduce. The likely suspects are
the podcast player widget resizing after its JavaScript initialises,
or DOM injected by Facebook and GTM. Worth opening the DevTools
Performance panel on a desktop episode page once, naming the
element, and sending that to Podpage rather than describing the
symptom.
The 960 pixel icon bug
Your subscribe buttons for Apple Podcasts, Spotify, Overcast, Pocket
Casts, Amazon Music, YouTube Music, Castbox and RSS are displayed at
20 to 34 pixels. Podpage's image resizer is being asked for a 960
pixel wide render of each one. The Overcast icon alone is 57,444
bytes. Lighthouse measured the Apple Podcasts icon at 125,372 bytes
total with 125,330 bytes wasted, which is 99.97%. Ten icons account
for roughly 427KB of the homepage's 1,089KB of image weight.
Third-party weight on the homepage
static.podpage.com, the Podpage bundle1,425 KB
YouTube, on episode pages only1,009 KB
Google Tag Manager251 KB
Facebook Pixel204 KB
SparkLoop69 KB
ConvertKit42 KB
Podpage's own bundle is the biggest number but it is Brotli
compressed and cached for a year, so it is efficiently delivered.
The YouTube embed is the one that hurts, because it loads about 1MB
and takes 637ms to 1,230ms of main-thread time on an episode page
before anyone presses play.
The one you can fix today
On Home, Episode and Products, the console throws
Uncaught TypeError: Cannot read properties of null (reading
'addEventListener'). The source is
https://chrishutchins.github.io/podpagejs.js, which is your own file on your own GitHub Pages repo. The script
is attaching a listener to an element that does not exist on those
templates. It does not fire on the blog template, which is the clue
to which element is missing. Add a null check and redeploy.
Copy and paste this to Podpage support
Hi Podpage team, three performance items on chrishutchins.com:
1) HTML is not being cached at the Cloudflare edge. Every page returns
cf-cache-status: DYNAMIC and cache-control: public, max-age=0,
must-revalidate. Blog and Products also send Vary: Cookie from the
csrftoken cookie. Our origin p75 TTFB has gone from 908ms to 1,380ms
over 25 weeks (CrUX), and the blog template is at 2,015ms with only
14% of visits rated Good. Can anonymous visitors be served a
cacheable, cookie-free HTML response? Fixing this would likely also
re-enable Brotli on the HTML, which currently falls back to gzip.
2) Subscribe-button icons are requested from img.podpage.com with an
rs:fit:960:0:1 transform but render at 20 to 34 CSS pixels. Examples
on our homepage weigh 57,444 / 55,900 / 53,600 / 45,040 / 40,804 /
40,016 / 38,170 / 26,320 / 25,642 bytes. Lighthouse reports 99.97%
wasted bytes on the Apple Podcasts icon. Can the transform width be
matched to the rendered size for subscribe icons?
3) The episode template embeds a youtube-nocookie.com iframe above the
fold with a lazyload class that does not actually defer it. It costs
~1,009KB of transfer and 637ms to 1,230ms of main-thread time before
anyone presses play. Could the episode template use a click-to-play
facade (static thumbnail, iframe injected on click)?
Also, if there is any way to defer Facebook Pixel and Google Tag Manager
until after first paint, our blog template shows 10,774ms of mobile
total blocking time, with 4,840ms from _combined-public.min.js,
1,601ms from gtag/js, and 1,461ms plus 1,293ms from Facebook.
And a lower-priority one: three vendor stylesheets (bootstrap-public,
boomerang-public, public_styles) are render-blocking and cost 900 to
1,200ms on mobile. Podpage already defers FontAwesome and Swiper CSS on
the same page, so the pattern exists.
Thanks!
π
The Products page is blank
Nick's note
Right now when I open your Products page nothing loads for me.
That is out of scope for SEO but I would fix it or hide it.
www.chrishutchins.com/products/ as it loads today. The H1 renders,
then nothing.
We checked this by hand because it looked like a broken script. It
is not. The page returns HTTP 200 and renders normally, and the same
JavaScript error from the speed section fires here as it does on
Home. The actual cause is simpler: the Podpage content container,
<div class="user-added-content">,
has no children in the raw HTML. Nothing was ever published into
that block. We found the identical empty-container signature on
/custom-about/, which confirms it is a
generic unfilled Podpage block rather than a Products-specific bug.
Two loose ends around it. The page carries
noindex, nofollow, which is the right call
while it is empty, but the nofollow also
stops link equity flowing through the nav links on that page. And
the URL is listed in your sitemap despite the noindex, which is a
small contradiction Google notices. Either populate the block and
drop the noindex, or pull it from the nav and the sitemap until it
is ready.
π
Content and transcripts
Your show notes are thin, and the fix is already built
We measured the unique body text on six episode pages spanning 2021
to 2026. Not the whole page, which runs 3,000 to 3,900 words once
nav and footer are counted, but the actual show-notes block.
Blog posts are much healthier: 765 to 3,668 words, with real H2
and H3 hierarchies and author schema. Episode pages are the
pattern worth fixing, and there are about 315 of them.
Word count is a coverage floor, not a ranking factor. A 700-word
page that fully answers a question is fine. The real risk here is
the ratio: 450 to 900 words of unique prose sitting inside a
template that ships 39 to 40 images and 70 to 110 nav and footer
links. At scale that is the shape quality raters are trained to
notice, even though every individual page is legitimate.
Transcripts: yes, publish them
Nick's note
My suggestion was to put the full transcript of each episode on
the show-notes page. I did not know if that was a best practice,
so I asked. The answer is yes, if it is public, on this site, and
lightly edited. And your platform already has the feature switched
off.
What we found on your site today. Your Podpage template
already has the transcript feature built in. Every episode page
ships an empty
<div id="transcript"> tab in the
HTML, and your own llms.txt file documents a
<episode-url>transcript.txt
endpoint, described there as "Episode transcripts, when available
locally, are served as text/plain". We tested it on
/world-of-hyatt-deep-dive/transcript.txt
and got a 404. The capability exists and is switched off. That is a
configuration gap, not a platform limit. Per Podpage's own
documentation, transcripts import automatically from your feed's
.srt or .json files if present, can be pasted manually per episode,
or can be auto-generated with speaker labels and timestamps on the
Elite plan.
The case for
Long-tail keywords. Thousands of words of natural,
question-and-answer language per episode that you and your
guest already said. It is exactly the phrasing searchers type,
and it is text you do not have to write.
AI citability. Transcripts are the most quotable, most
attributable content on a page. Self-contained exchanges fit
closely with the 134 to 167 word passage pattern AI search
systems favour.
Accessibility. They serve deaf and hard-of-hearing
listeners and non-native English speakers. That is a genuine
trust signal independent of SEO.
The case for caution
Page bloat. A raw transcript dumped inline can push a
page past 8,000 to 10,000 words of unscannable text. The win
comes from structured transcripts with speaker labels and
paragraph breaks, not from a wall of words.
Duplicate content. If chrishutchins.com and
allthehacks.com ever publish the same transcript, that is real
duplication across two domains you control. Pick one home and
link, do not republish.
Auto-transcript quality. Unedited speech recognition
mangles proper nouns, which are exactly the terms you want to
rank for. Do not ship "Hyatt Globalist" or a card name
unreviewed.
What the other big podcasts actually do
Show
Approach
Verdict for SEO
Tim Ferriss
Full transcripts, public, on a separate URL per transcript
The strongest model in the set. Public and indexable.
Huberman Lab
Transcripts gated behind a paid Premium membership
A negative case study. Paywalled text is not crawlable or
citable.
The Knowledge Project
Individual transcripts sold via Gumroad
Also gated. Not an SEO play.
Lenny's Podcast
Full transcripts for all 320 plus episodes, largely as bulk
downloadable archives
A community play more than a page-level SEO play.
What we would do on your site
Turn on the existing Podpage transcript feature for new
episodes going forward. The tab and the endpoint already exist in
your template, so the engineering cost is close to zero.
Use the collapsed tab your template already ships, not a
separate /transcript/ URL. Tim Ferriss built his pattern before
this in-page tab existed as a platform option. Keeping the
transcript on the episode URL consolidates link equity and avoids
a second thin page per episode.
Add speaker labels and clean up the proper nouns before
publishing. Guest names, card names, program names.
Link your existing chapter timestamps into the transcript.
You already publish good chapter markers on 4 of the 6 episodes we
sampled. Anchoring them gives the transcript the same structure
the show notes have.
Back-fill by priority. Start with the 20 to 30
most-trafficked evergreen episodes, the points and miles deep
dives, the "What's in My Wallet" companions, the credit card
strategy episodes. Not all 315 at once.
Do not duplicate onto allthehacks.com. If that domain
surfaces the episode, link to the transcript rather than
republishing it.
The Key Takeaways and FAQ retrofit
This is the cheapest win in the whole audit, because the format
already exists on your site and it works. Compare two of your own
pages:
/world-of-hyatt-deep-dive/, 2026
Strong. A Key Takeaways block with five quotable bullets,
plus a four-question FAQ with direct answers in the 40 to 80
word range. One answer about Globalist status runs 39 words, is
fully self-contained, and directly answers a question-shaped H3.
This is close to ideal formatting for AI citation.
/sam-corcos-delegation/, 2024
Weak. No FAQ, no Key Takeaways, no subheadings in the
body at all. One descriptive paragraph plus chapter timestamps.
There is nothing here that an AI engine can lift as a clean,
self-contained answer.
Present on 2 of 2 sampled 2026 episodes. Absent on 4 of 4 sampled
2021 to 2024 episodes. Sample suggests roughly 290 of about 315
episodes predate the format. One editing pass per episode fixes both
structure and freshness at the same time.
Freshness, and the 2024-07-26 problem
114 / 318Episode pages untouched for 2 or more years
50 / 169Blog posts untouched for 2 or more years
144Of those pages share one date, 2024-07-26. One bulk edit, not
144 updates.
We cross-checked sitemap lastmod against the dateModified in each
page's JSON-LD on all six episode samples and they agree, so lastmod
here is a genuine last-edit signal rather than a template artefact.
That is good news: republishing an updated evergreen post really
does move the freshness signal. Nothing technical is blocking a
refresh programme. There just is not one.
The "What's in My Wallet" year series
You have two URLs per year on this topic, an episode page and a blog
companion, published the same day. They are not technically
duplicate, because each has its own title and its own
self-referencing canonical. They are a soft cannibalisation risk:
same year, same topic, near-identical intent. The blog versions are
longer and better structured (2,596 to 3,668 words with real H2 and
H3 hierarchies) so they are probably absorbing most of the ranking
value already. The bigger issue is that a searcher landing on the
2024 version in 2026 gets two-year-old card recommendations with no
pointer to the current one. Add a "see the 2026 version" link from
every older year.
Your structured data is unusually mature for a Podpage default
install. One JSON-LD block per page, one @graph, and Organization,
WebSite, PodcastSeries, PodcastEpisode, VideoObject, BlogPosting,
BreadcrumbList and SiteNavigationElement all tied together with @id
references. There are four specific gaps.
1. The category title bug, shown literally
This is what your <title> tag
currently says on /categories/travel-points-miles/:
Travel, points + miles Episodes | All the Hacks with Chris Hutchins | All the Hacks with Chris Hutchins
103 characters, brand name twice. Same bug on
/categories/money-investing/ (98 characters) and
/categories/life-work/ (92). Google will cut this off around 60.
These three pages are among the meatiest on the site, at 2,649 to
2,737 words each with about 40 unique internal links, and they
present themselves in search like a template someone forgot to
finish.
2. Six placeholder meta descriptions
Page
Current description
Length
/about/
"Chris Hutchins page for All the Hacks with Chris Hutchins"
57
/products/
Podpage placeholder
51
/contact/
"Contact page for All the Hacks with Chris Hutchins"
50
/newsletter/
Podpage placeholder
55
/sponsors/
Podpage placeholder
56
/categories/
Podpage placeholder
53
Aim for 140 to 160 characters, written for a human deciding whether
to click. Dashboard, Settings, SEO Metadata.
3. Your Person name is a greeting
Every page that references you carries
"name": "Hi, I'm Chris Hutchins π" in the
Person block. It is charming on the page and wrong in the markup.
Set name to "Chris Hutchins" and move the
greeting into description if you want to
keep it. Related and more important:
/about/ has no Person schema on it at all.
Your Person entity lives at
/people/chris-hutchins/, is referenced as
the author on blog posts, and is never attached to the one page that
is actually about you. That is the clearest missed opportunity on
the site, and it connects directly to the "Chris Hutchins" search
problem below.
4. PodcastEpisode is missing transcript and author
Confirmed absent on all three episode years we checked, 2026, 2024
and 2022, so the template has not changed on this front in four
years. The episode object also uses
timeRequired rather than the more standard
duration. Both are valid, but
duration is what podcast tooling and AI
parsers expect, so add it alongside rather than replacing. One
honest caveat: Google shut down Google Podcasts in 2024 and never
had a PodcastEpisode rich result in classic search, so the value
here is for aggregators, AI answer engines and Apple or Spotify
adjacent tooling. Worth doing well. Not worth overselling.
The JSON-LD we would ship, three blocks
a. Episode page. Adds transcript, duration, an explicit
author, and a BlogPosting wrapper for the written show-notes
text, which currently has no article markup at all.
{
"@context": "https://schema.org",
"@type": "PodcastEpisode",
"@id": "https://www.chrishutchins.com/world-of-hyatt-deep-dive/#episode",
"name": "Deep Dive on World of Hyatt: Points, Perks and Status",
"url": "https://www.chrishutchins.com/world-of-hyatt-deep-dive/",
"partOfSeries": { "@id": "https://www.chrishutchins.com/#podcastseries" },
"episodeNumber": 294,
"datePublished": "2026-09-09T09:00:00+00:00",
"duration": "PT[HH]H[MM]M[SS]S",
"timeRequired": "PT[HH]H[MM]M[SS]S",
"associatedMedia": {
"@type": "MediaObject",
"contentUrl": "[megaphone mp3 enclosure URL]"
},
"author": {
"@type": "Person",
"@id": "https://www.chrishutchins.com/people/chris-hutchins/#person"
},
"transcript": {
"@type": "CreativeWork",
"url": "https://www.chrishutchins.com/world-of-hyatt-deep-dive/#transcript",
"text": "[full transcript text once the Podpage field is populated]"
},
"image": { "@type": "ImageObject", "url": "[episode artwork URL]" }
}
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Deep Dive on World of Hyatt: Points, Perks and Status",
"url": "https://www.chrishutchins.com/world-of-hyatt-deep-dive/",
"author": {
"@id": "https://www.chrishutchins.com/people/chris-hutchins/#person"
},
"publisher": { "@id": "https://www.chrishutchins.com/#organization" },
"datePublished": "2026-09-09T09:00:00+00:00",
"image": { "@type": "ImageObject", "url": "[episode artwork URL]" },
"articleBody": "[show-notes text already on the page]"
}
b. About page Person. Built only from what is already on
/about/ today. No award is named, because no award name appears
anywhere on the site. If a real one exists, add
"award": "[name, year]".
{
"@context": "https://schema.org",
"@type": "Person",
"@id": "https://www.chrishutchins.com/about/#person",
"name": "Chris Hutchins",
"url": "https://www.chrishutchins.com/about/",
"jobTitle": "Founder / Host, All the Hacks",
"description": "Avid optimizer and host of the All the Hacks podcast. Previously Head of New Product Strategy at Wealthfront, co-founder and CEO of Grove (acquired by Wealthfront), co-founder of Milk (acquired by Google), and an investor at Google Ventures.",
"alumniOf": [
{ "@type": "Organization", "name": "Wealthfront" },
{ "@type": "Organization", "name": "Google Ventures" }
],
"subjectOf": { "@type": "Movie", "name": "Playing with Fire" },
"sameAs": [
"https://twitter.com/hutchins",
"https://www.instagram.com/chrishutchins",
"https://youtube.com/@allthehacks",
"https://threads.net/@chrishutchins",
"https://linkedin.com/in/chrishutchins"
]
}
c. WebSite SearchAction. Completeness only. Current
Google guidance says this produces no sitelinks search box
benefit, so treat it as optional.
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "https://www.chrishutchins.com/#website",
"url": "https://www.chrishutchins.com/",
"name": "All the Hacks with Chris Hutchins",
"publisher": { "@id": "https://www.chrishutchins.com/#organization" },
"inLanguage": "en",
"potentialAction": {
"@type": "SearchAction",
"target": "https://www.chrishutchins.com/search?q={search_term_string}",
"query-input": "required name=search_term_string"
}
}
π
Two domains, one decision
You asked whether allthehacks.com and chrishutchins.com are
competing. They are not duplicating content. Here is what is
actually wired up today.
What we measured: allthehacks.com is already a pure redirect
domain. Every path 301s in two hops into www.chrishutchins.com.
The one real loose end is posts.allthehacks.com, a live ConvertKit
newsletter archive that does not redirect and is not cross-linked
from anywhere.
Nick's note, and this is the big one
I would keep two domains on purpose: chrishutchins.com for you,
allthehacks.com for the show. If you ever sell the podcast, the
brand and its SEO should be able to leave with it.
Here is my reasoning. chrishutchins.com should be your personal
site. Bio, press, speaking, investing, what you are up to.
allthehacks.com should be the podcast's home. Episodes, show
notes, transcripts, the newsletter, the credit card tools, the
membership. If you ever sell the show or bring on a partner, the
brand, its content, its backlinks and its rankings travel with
allthehacks.com. Today the podcast's entire SEO equity is accruing
to your personal name domain, which is the one asset you can never
sell.
The migration is a well understood project. It is 1 to 1, slug for
slug, and the redirects already run in the other direction so the
mapping is known. The entity split gets cleaner too: Person on
chrishutchins.com, PodcastSeries and Organization on
allthehacks.com, each pointing at the other with sameAs.
The audit team's counterpoint, presented honestly
The consolidation onto chrishutchins.com is about 90% done and
every external link already points there. Reversing it is a real
migration with a temporary ranking dip. If you have no plan to
ever sell or separate the podcast, finishing the consolidation is
the lower-risk path: collapse the redirects to one hop, and either
fold posts.allthehacks.com into /blog/ or cross-link it properly.
Common Crawl also shows allthehacks.com with weaker domain-graph
signals than chrishutchins.com, which argues for the consolidation
direction on today's numbers.
Both readings agree on one thing. Pick a direction deliberately
and stop the in-between state, where the nav links out to
allthehacks.com and a JavaScript redirect bounces through it.
One detail to preserve in any scenario: your RSS feed at
feeds.megaphone.fm/ATHLLC4474951365 is
referenced from the homepage as a
rel="alternate" link and is unaffected by
either decision. Do not break it.
π
Search reality check
We ran eight live Google searches on 2026-09-16 and looked at what
actually ranks. You rank for your brand. You do not rank for the
money queries, and you do not rank for your own name.
Query
In the top 10?
What the results actually want
all the hacks podcast
Yes, homepage and /episodes/
Brand result. Podcast platforms, directories, your homepage.
Aligned.
chris hutchins
No
Wikipedia for a different, deceased Chris Hutchins, plus
Amazon, LinkedIn, Instagram, Facebook, tim.blog.
world of hyatt status
No
Evergreen guides with tier tables. You have a 2,781 word
page on this and it contains zero tables.
credit card transfer partners
No
Partner matrix reference pages. Every issuer by every
airline and hotel, with ratios.
what are points worth
No
A dated valuation table, refreshed on a visible cadence.
best credit card for points
No
A continuously updated "best of" listicle with a comparison
table.
how to book bora bora on points
No
Long-form destination guide with step-by-step redemption
charts.
die with zero
No
Book and publisher pages. This is Bill Perkins' book, so not
competing here is expected.
None of those six non-branded results are owned by show-notes pages.
They are owned by guides, tables and tools from The Points Guy,
NerdWallet, AwardWallet, Upgraded Points and Prince of Travel. This
is a page-type mismatch, not an authority problem. You have the
knowledge. The page shape is wrong.
Three ranking assets you could build from content you already have
Turn /world-of-hyatt-deep-dive/ into a World of Hyatt status
and points guide.
The words are already there, 2,781 of them. What is missing is a
benefits-by-tier table a reader can scan in ten seconds, put above
the fold, with the episode and audio player underneath as
supporting content, plus a visible "last updated" date. Same URL,
same episode, different page shape.
Build a /credit-card-transfer-partners/ matrix hub. Today
/credit-cards/ returns a 404 and the nav
item by that name goes off-domain. You have almost certainly
covered every one of these programmes across individual episodes.
The missing asset is one evergreen page that aggregates them into
a sortable table and links out to the relevant episode for the
"why" on each one. No new research, just consolidation.
Publish a dated "what are points worth" valuation table.
The Points Guy ranks for this because the page is mechanically
refreshed and visibly dated. Publish an equivalent, refresh it
quarterly, and cross-link it from every relevant episode. It is a
recurring listener question, which means it is a recurring search.
The entity problem behind "Chris Hutchins"
Three things stack up here. Your homepage title is "All the Hacks:
Upgrade Your Life, Money and Travel" and contains no mention of your
name, on a domain that is your name. Your
/about/ page has no Person schema. And
there is no Wikipedia or Wikidata entity for you, which we confirmed
by direct search, while a different Chris Hutchins does have one.
Fixing the first two is free and is covered in the schema section.
The third cannot be self-published, but the CNBC, New York Times,
Wall Street Journal and Tim Ferriss mentions are the right building
blocks for a future notability case. We did not independently verify
those press mentions, so confirm them before anyone cites them as
done.
π
Authority and links
Nick's note
Chris is my friend and All the Hacks is a very popular show. He
has been on the Internet for many years, which is why I see a
domain authority of 45 in Ahrefs. That is a real asset and most of
this audit is about not wasting it.
We could not corroborate that number with the tools available in
this audit, and we want to be straight about why. The Moz API key
returned "Invalid Moz API key" on every call. Bing Webmaster Tools
has no verified property for this domain. Ahrefs itself is blocked
by your robots.txt. Nothing we found contradicts DR 45, but nothing
here confirms it either. The DR 45 figure is Nick's own reading from
his Ahrefs account.
What we could pull is the Common Crawl web graph, which gives
relative ordering only.
Domain
PageRank rank
Harmonic centrality rank
thepointsguy.com
17,117
6,747
lennysnewsletter.com
30,367
458,101
onemileatatime.com
111,791
471,679
frequentmiler.com
737,221
472,921
timferriss.com
2,636,800
2,753,380
chrishutchins.com
2,674,821
3,206,774
allthehacks.com
3,427,825
9,436,999
How to read that table, and how not to
Lower rank number means stronger. These are graph-presence signals
from one crawl. They are not on the same scale as Moz DA or Ahrefs
DR and should never be quoted as if they were. Use them for
relative ordering only, and treat the confidence as moderate.
What they do suggest: The Points Guy is in a different league,
because it is a dedicated affiliate media operation. You land in
roughly the same tier as timferriss.com, which is the same shape
of property, a podcast host's personal domain without a
content-marketing machine behind it. Lenny's Newsletter is
meaningfully stronger than both, which is the encouraging data
point: a personal-brand site can compete if the content and link
strategy are deliberate.
Ten places worth a link, all confirmed to exist
Podpage's own spotlight post about All the Hacks. The
platform you pay for already wrote about you. Confirm it links to
chrishutchins.com with a followed link. Zero outreach cost.
The Tim Ferriss Show episode page for your guest
appearance. tim.blog ranks far above you in the table above.
Confirm the show notes link out and that the anchor text includes
"All the Hacks".
ChooseFI episode page for your appearance. Confirmed live
link. Easy to request an update if consolidation changes any URLs.
The Speaker Lab guest episode. Confirmed live link, anchor
text "Listen to All the Hacks podcast".
Creator Science guest page. A guest bio page, good
candidate for an unlinked-mention check.
Nathan Barry's podcast episode page from January 2026, on
growing a podcast. Verify or request a link.
Zero to Travel's feature post, a full write-up of the best
hacks from your show. Strong candidate for full attribution.
Podchaser creator profile. Claim and complete it, and make
sure the "elsewhere" links point at chrishutchins.com.
Listen Notes podcast page. Already links to you. Verify it
stays current after any domain cleanup.
BiggerPockets Money and BiggerPockets Real Estate. You are
a repeat guest. Request show-notes links on any episode pages that
do not have one yet.
Name the award
Your Organization and PodcastSeries schema both describe the show
as "award-winning", and the phrase shows up in third-party copy
about you too. We searched and found no award name, no issuing
body and no year, anywhere. Right now it is an unverifiable claim
floating around the web with nothing on your own site to back it.
If a real award exists, tell us the name and we will build an "As
Seen In and Awards" section with proper structured data behind it.
If one does not, the phrase is doing you more harm than good.
Two more link-adjacent notes
Reddit and YouTube matter more than backlinks for AI citation.
In the correlation data behind our GEO scoring, YouTube mentions sit
around 0.737 and Reddit is high, while backlinks sit around 0.266.
Two cheap moves: make sure every YouTube upload has a full,
keyword-rich description that links back to the matching show-notes
page, and consider an AMA or a genuine presence in r/churning and
r/awardtravel tied to specific episodes.
Your Tim Ferriss appearance is a citable authority asset you are
not using.
Neither /about/ nor
/people/chris-hutchins/ references it
today.
π¨
Design praise, and three image nits
Nick's note
The site is so nicely designed. I love the cartoons and the
graphics. You are doing a great job linking to your YouTube videos
and show notes.
The image work is better than the markup suggests. Podpage's proxy
auto-converts everything to WebP at sensible quality, your social
preview images are generated per page at exactly 1200 by 630 and
weigh 34KB, and your favicon set is complete from 16px up to 256px
plus a 180px Apple touch icon. Where alt text exists it is genuinely
descriptive, not filename noise. Three things are worth fixing.
The cartoons have empty alt text. The pig and the earth
illustrations sit inside your homepage body copy, so they are
content, not decoration, and both ship with
alt="". Describe them. It takes a minute
and it is the kind of detail that makes the rest of the site's
polish believable.
They are also over-served. The pig is 55.9KB displayed at
215 by 191 pixels. The earth is 43.9KB displayed at about 321 by
310. Both are requested from the proxy at 960 pixels wide. This is
the same URL-parameter issue as the subscribe icons, not a
file-optimisation job.
Most in-article images have no width or height. 29 of 40
images on one episode page, 28 of 39 on another, including the
episode artwork itself. That is a layout-shift risk, and it lines
up with the desktop CLS number of 0.34 in the speed section.
Adding intrinsic dimensions or a CSS aspect-ratio to the episode
template's image component is the cheapest fix in this section.
One more, purely cosmetic: your favicon link tags are typed
image/x-icon but the files are actually
WebP. Nothing breaks. Correct it if you are in there anyway.
The homepage on desktop. The subscribe-button row visible here is
where the 427KB of oversized icons lives.
π
Everything else
The secondary findings, all Medium or Low. Nothing here should jump
the queue ahead of the top ten, but each one is real and each one is
cheap.
Open the full secondary findings list, 18 items
Severity
Finding
Fix
Medium
Canonical tag echoes query strings, so a UTM-tagged URL
gets its own canonical. Index-bloat risk on a site that
shares tracked links constantly.
Ask Podpage to strip utm_*, fbclid and gclid server
side. Not fixable from your admin panel.
Medium
"What's in My Wallet" exists as a root episode page plus
a blog post for 2024, 2025 and 2026, with no forward
links from old years.
Add a "see the 2026 version" cross-link to every older
year.
Medium
36% of episode pages (114 of 318) and 30% of blog posts
(50 of 169) untouched for 2 or more years. 144 of them
share the date 2024-07-26.
Start a refresh cadence. Pair it with the Key Takeaways
retrofit so one editing pass fixes both.
Medium
Newsletter-digest blog posts use 4 H1 tags, confirmed on
3 of 4 sampled. Regular posts and episodes correctly use
1.
Demote the section headers in the digest template to H2.
Medium
73% of episode-page images lack width and height.
Desktop field CLS is 0.34 with only 46% of visits Good.
Mobile is fine at 0.01.
Add intrinsic dimensions to the episode template image
component, then investigate the desktop-only shift
source.
Medium
PodcastEpisode schema has no transcript and no author,
and uses timeRequired rather than duration.
See the schema section. Add duration alongside
timeRequired rather than replacing it.
Medium
Person name in schema is "Hi, I'm Chris Hutchins π".
/about/ has no Person schema at all, and never links to
/people/chris-hutchins/.
Set name to "Chris Hutchins". Add Person schema to
/about/ and link the two pages.
Medium
Nav hub pages are tool landers, not hubs: Credit Card
Optimizer 87 words, Transfer Partners 165, Delegation
Guide 220, Gift Cards 249. Category pages have no intro
copy.
Write a real intro on each category page. Consider
genuine pillar pages for your five actual topic
clusters.
Medium
No Wikipedia or Wikidata entity for Chris Hutchins,
while a different Chris Hutchins has one.
Not self-publishable. Build the secondary-source case
first.
Low
No guest bio block on any guest episode, confirmed
absent on 3 of 3 sampled.
Add a short guest bio with sameAs links to the episode
template.
Low
Cartoon illustrations have empty alt text and are served
at 960px for a 215 to 321px display.
Write alt text. Request the display width from the image
proxy.
Low
Three Podpage stylesheets are render-blocking and cost
900 to 1,200ms on mobile.
Podpage already defers FontAwesome and Swiper CSS on the
same page. Ask them to apply the same pattern.
Low
HTML is served gzip, not Brotli, even though the browser
advertises Brotli support.
A side effect of the missing edge cache. Fixing the
cache likely fixes this too.
Low
preconnect to fonts.gstatic.com is dead weight, because
the fonts are self-hosted on Podpage's CDN.
Remove the preconnect. Tiny win.
Low
Uppercase URL variants return 404 rather than
redirecting to the lowercase canonical.
Optional. Only matters if an external site links with
the wrong casing.
Low
One repeated template image is missing alt text on every
blog post sampled, 21 of 22 across all six.
Find the one recurring asset and give it alt text.
Low
llms.txt lists only the 29 most recent episodes, with no
blog posts or evergreen tool pages.
Optional. Google ignores llms.txt, so this is low
priority.
Info
Favicons are labelled image/x-icon but are actually
WebP. FAQPage rich results were retired in May 2026, so
your FAQ schema is harmless but no longer earns a rich
result. No IndexNow key file, which appears to be a
Podpage limitation.
Cosmetic, informational, and out of your hands
respectively. No action needed.
π¬
How we did this
Audit date 2026-09-16. Everything in this document was measured from
outside the site, with public data only.
Tools
The claude-seo toolkit v2.3.1, which wraps Google PageSpeed
Insights v5, the Chrome UX Report API with 25 weeks of history,
the Common Crawl web graph, and Playwright for screenshots.
curl with a Chrome browser user agent. Your site returns HTTP 403
to plain curl, so every fetch used a real browser identity.
Live Google searches for eight queries, run on the audit date from
US results.
Podpage's own product and support documentation, for what is and
is not configurable.
What we sampled
Check
Pages
Indexability and technical
20
On-page metadata
19
Schema
12
Content quality, 6 episodes 2021 to 2026 plus 6 blog posts
12
Random sitemap URLs, seeded for repeatability
25
Lab performance, home, episode, blog, products
4
What we could not see
Gaps, stated plainly
Google Search Console. No access. This is the big one. We
can see what exists on the site but not what earns impressions,
so every prioritisation here is based on structure rather than
on your actual traffic.
Moz. The API key returned "Invalid Moz API key" on every
call, so there is no DA, PA, spam score or anchor text data in
this report.
Bing Webmaster Tools. The property is not verified on our
account.
Ahrefs. Blocked by your own robots.txt and not part of
the toolkit. The DR 45 figure is Nick's own reading.
How the work was done
Five specialist agents ran in parallel, one each for technical and
sitemap, performance, content and AI search, schema and on-page and
images, and backlinks and domain strategy and search experience. A
lead agent cross-checked their findings against each other, and
disagreements were resolved by re-fetching. Two examples: the About
page JavaScript redirect was first reported as a plain 301 and had
to be verified by hand, and the blank Products page was first
reported as a rendering failure before a screenshot and a raw-HTML
check showed it is an empty content block. Nick reviewed the result
and wrote the yellow notes himself.
One ask
Give Nick read-only access to your Google Search Console and we
will do a second pass that tells you which of these 491 pages
actually earn impressions, which queries you are close to winning,
and which fixes to do first based on your real numbers rather than
on structure alone. It takes about a minute to add a user, and it
changes the quality of everything above.