The problem starts from puppyhood, even if we are incredibly diligent to not give attention for jumping, it can be extremely difficult to control the other humans in our dogs lives and every time the dog jumps on someone he is practicing this unwanted behaviour and a lot of the time getting rewarded for it wether its intentional or not.
The other main reason is the due to the misconception of what the act of jumping actually means to a dog and why they do it. It is not a sign of domination and they are not behaving badly. Puppies jump up to lick the muzzle of their mothers as a sign of deference and appeasement to show they mean no harm, so when they greet a human the only way to get to our 'muzzles' to lick us is by jumping.
In their eyes they are doing their natural behaviour, so when we show displeasure they get confused and wonder why they are failing to communicate with us, "next time I must jump more and maybe my human will understand"
The solution is simple, prevention of the act of jumping is key! There are various ways you can teach your dog not to jump, but you cant rely on other people to follow your instructions, you must ensure your dog NEVER gets to practice jumping by doing the following:
1. When you enter the house after an absence from your dog, don't greet him as soon as you enter, put your keys down, walk past your dog and do something else for 5mins before interacting with your dog. Do not interact unless he is calm, if he is still excited after 5 minutes, wait longer. If you interact while he is over excited you are rewarding this behaviour.
2. If your dog jumps on you at any time, do not shove him off, do not knee him or get mad or even yell NO. These are all ineffective ways to teach your dog not to jump. Keep your arms close to your body or folded, turn your head to the side (this is a calming signal to dogs) and stand very still and silent. Either wait for your dog to sit or ask him to sit and then calmly praise. If this does not work you can also simply leave the room every time he jumps and stop interacting with him until he is calm, or calmly put your dog in a minute time out and repeat if necessary.
3. Work daily and diligently on your dogs sit-stay so he understands it well, not just when you need him to perform under pressure
4. This is the most important step. Until your dogs behaviour changes, Never let your dog greet another person unless the next two conditions are met: a) he is on a leash
b) he is sitting
This is the key to his behaviour change in preventing the unwanted behaviour, this means putting your dog on leash before visitors arrive and telling them to stand in the doorway and only approach if your dog remains seated, if he gets up the person backs up and waits for your dog to sit. Repeat as many times as necessary. If the distance the person is standing is still too close for the dog to be able to sit, perhaps the person needs to stand further back outside the door or the dog must stand further inside the house.
This rule applies on walks too, no one may pet your dog unless they are sitting, if they cant perform the task yet, then explain to the person sorry my dog is in training and isn't ready to greet people yet, you must be firm with people.
If your dog is off leash then you must call him back every time you spot a person and put his leash on no exceptions, if your recall isn't strong enough then this too must be worked on diligently and daily.
Now that you understand the reasons and how to prevent jumping you can change your dogs behaviour, it is your job to teach your dog the acceptable alternative, it will take time and patience but you can do it!