First I would be using a single site... then all of your problems go away....
This "<link rel="alternate" href="http://example.com/" hreflang="x-default" />"
just sets everything to the US site basically.. you need to tweak it some...
Try this, it should solve your issues....
it sets the x default to the language of the county...
( Now understand you have to update all your hfeflang tags on every page.
I would consider using the site map method of adding hreflang tags. It
eliminates having to edit each page. All the tags are in one place
SEE EXAMPLE BELOW
)
Here are hreflang tags for 3 sites.. Uk, US and Germany
( edited to correct error in hreflang tags )
On your home page for the British site...
<link rel="alternate" hreflang="-gb" href="https://example.co.uk"/>
<link rel="alternate" hreflang="-us" href="https://example.com"/>
<link rel="alternate" hreflang="-de" href="https://example.de"/>
<link rel="alternate" hreflang="x-default" href="https://example.co.uk"/>
Then on your home page your US site
<link rel="alternate" hreflang="-us" href="https://example.com"/>
<link rel="alternate" hreflang="-gb" href="https://example.co.uk"/>
<link rel="alternate" hreflang="-de" href="https://example.de"/>
<link rel="alternate" hreflang="x-default" href="https://example.com"/>
Then on your home page for German site
<link rel="alternate" hreflang="-de" href="https://example.de"/>
<link rel="alternate" hreflang="-us" href="https://example.com"/>
<link rel="alternate" hreflang="-gb" href="https://example.co.uk"/>
<link rel="alternate" hreflang="x-default" href="https://example.de"/>
Now here is the most robust way to add to each site if on different domains.....
This uses the sitemap method..
Curtesy of Google....
https://developers.google.com/search/docs/advanced/crawling/localized-versions
Example
Here is an English language page targeted at English speakers worldwide, with equivalent versions of this page targeted at German speakers worldwide and German speakers located in Switzerland. Here are all the URLs present on your site:
www.example.com/english/page.html
targeted at English speakers.
www.example.com/deutsch/page.html
targeted at German speakers.
www.example.com/schweiz-deutsch/page.html
targeted at German speakers in Switzerland.
Here is the sitemap for those three pages:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://www.example.com/english/page.html</loc>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://www.example.com/deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="de-ch"
href="https://www.example.com/schweiz-deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
<url>
<loc>https://www.example.com/deutsch/page.html</loc>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://www.example.com/deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="de-ch"
href="https://www.example.com/schweiz-deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
<url>
<loc>https://www.example.com/schweiz-deutsch/page.html</loc>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://www.example.com/deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="de-ch"
href="https://www.example.com/schweiz-deutsch/page.html"/>
<xhtml:link
rel="alternate"
hreflang="en"
href="https://www.example.com/english/page.html"/>
</url>
</urlset>