You can't just allow American visitors because Internet addressing isn't country-consecutive. But you can block in other ways...
When necessary, I weed out loads and loads and LOADS of 'unwanted' visitors by rewriting piped top-level domains (TLDs). For example, from a U.S. medical site that has zero to offer anyone beyond its zip code (and re which Google's geo-specific setting does zilch):
R
ewriteCond %{REMOTE_HOST} \.(adsl|int|de|pl|hr|ro|ru|su|hk|ar|arpa|bg|br|bf|cz|tw|cn|fr|be|ua|bw)$ [OR]
RewriteCond %{REMOTE_HOST} \.(mx|hu|he|nl|se|za|sk|sa|ba|cl|ch|ba|co|cu|gh|id|ir|uk|gh|yu|bd|kz)$ [OR]
RewriteCond %{REMOTE_HOST} \.(lt|in|yt|cm|ma|ni|au|it|sg|my|pk|pt|ma|mobi|mu|np|si|tr|vn|tv|py|il|gy)$ [OR]
RewriteCond %{REMOTE_HOST} \.(lu|hm|hn|be|th|uk|cc|es|nu|jo|ca|dk|eu|md|ne|ug|is|md|ne|np|ve|ie|zm|zw|tt)$ [OR]
(etc.)
{Note: That example will
not work as-is.]
Waaay back when, I kept blocked TLDs in alphabetical order; now I just add on whenever I see another new/odd TLD in the log. If you don't use mod_rewrite, you could adapt to "SetEnvIfNoCase Remote_Host". Or use a long list of "deny from" lines.
Additionally, vis-a-vis IPs:
On other sites, I block my most troublesome countries' IPs using the "Country IP Blocks" site's FREE lists. Don't hold your breath for super-frequent updates but no matter. What they have is grrrrreat. I copy-paste the following format into .htaccess --
[
countryipblocks.net...]
-- you might prefer the others:
[
countryipblocks.net...]
.....
Aside/FWIW: Speaking of unwanted visitors... Another of my sites has a page with "bomb" in the title (about a movie). It's more than a little disconcerting how many people from all over the place search for: "how to make a bomb". (shudders)