A general rule when designing a network protocol : do your best to make the client-side closes the connection when possible.
Note that the web page discusses load balancers in a few places. If you have such a setup, the LB is effectively acting as a client and so the TIME_WAITs will still pile up on one of your machines.
If the load balancer can re-use the HTTP connections from LB<->web server with keepalives, then it will reduce them.
Imagine you run a site that provided a common javascript library. People are encouraged to add a link to fetch the .js file from their 3rd party webpages. So most clients contacting your server will be there to fetch one file only. Even if the user continues to browse the 3rd party website, they won't make further requests to your server. One connection, one request. Here, keepalives would be a bad idea.
The original wording was poor enough that it's ambiguous whether the claim is “enable keepalive unless you have a high bounce rate” or “enable keepalive if you have a high bounce rate”.
High traffic and high bounce rate, will leave a lot of TIME_WAIT hanging around for precious seconds and soon enough your server won't be able to accept new connections.
Obviously this applies if you have both: high traffic and high bounce rate. Any high traffic service over TCP where a client connects to the server for a very brief moment and doesn't come back until hours or days later, or never.
I read your advice as "Only use HTTP keep-alive if you have a high bounce rate", when I presume you mean the opposite.
1. Unless P, then Q.
2. P is "have a high bounce rate"
3. Q is "do not use keep alives"
I think you meant: 1. If P, then Q.
2. P and Q same as above.Apologies for the poor wording.