A nervous teen male tries to make his date watch a "scary" video. A friend calls to find out if he was able as it has been seven days, but water seeps into the room, going out he sees the girl has her eyes covered. Samara crawls from the TV and the teens (Kelly Stables and Daveigh Chase) scream.
Newspaper reporter Rachel Keller (Naomi Watts) and her son Aidan (David Dorfman) have moved to a small town, Astoria, Oregon, to get away from the terrifying events that happened to them in Seattle. Rachel now works for the local newspaper, The Astoria Gazette, when she hears on the police scanner that the police are investigating the mysterious death of a teenager.
Rachel goes to the crime scene and discovers that Samara Morgan is back, starting a new cycle of death by taking her revenge on the people of Astoria. She sneaks into the teen's house, recovers the VHS, and burns it. Aidan then dreams he is taken inside the video. Samara attacks him because Rachel burnt the videotape.
The next day mother and son go to a funfair, where the boy takes pictures of himself with Samara reflected in a mirror. Also, they are attacked by a herd of deer on the road. Aidan begins to lose body temperature, so Rachel takes him to her office. She asks a reporter, Max (Simon Baker) for help. They go to his house and Rachel runs a hot bath. She puts Aidan in the tub despite his fears and goes back to her own house to pick up some things. On returning the bathroom door is locked, water seeps out. Rachel manages to break in, Aidan is at the center of a reverse whirlpool. Rachel breaks the spell and water floods the room. Max takes Aidan to the hospital. Hospital doctors find bruises on Aidan, and Emma Temple (Elizabeth Perkins) believes that Rachel has been abusing him, so she forbids Rachel to visit him anymore. Aidan is asleep with severe hypothermia. When Dr. Perkins asks him about his mother, he only says he wants to go home and that he wants "mommy", instead of calling to her Rachel as he always does. When Dr. Perkins tells him he can not go home, he forces her to give herself an air embolism in order to kill her, while remarking, "it won't stop".
To stop what is happening to Aidan, Rachel goes back to the home of Samara Morgan in Seattle to find the truth. Samara had been adopted, so she looks for the biological mother, Evelyn (Sissy Spacek), who has been in a mental hospital. Evelyn had gone through a very difficult pregnancy and a hard post-birth depression, and had tried to kill Samara as a baby (Caitlin Mavromates) without success. Evelyn tells Rachel the only way to save Aidan is by killing him by drowning him, and that he'll tell her so. The male nurse (Victor McCay) tells Rachel that she's not the first mother who has asked Evelyn for help.
Aidan has left the hospital and goes back to Rachel's home. Max arrives and despite protests tries to take Aidan's picture. Max disappears, leaving behind only his jacket. Rachel returns and finds Aidan alone, and suspects it's not really him when he calls her "mommy". Rachel goes to look for Max and finds him dead in his car.
Rachel notices drastic personality changes in Aidan. He continues calling her "mommy", as well as never sleeping and just watching TV. Aidan's spirit is only able to communicate with Rachel when she is asleep. In a dream state Aidan tells Rachel that she must drown him, otherwise Samara will never leave his body which is clearly possessed by Samara. Rachel drugs Aidan to put him to sleep, since the only way to get Samara's spirit to leave is to drown Aidan. As she begins to put him under the water, he awakens and protests that he is not Samara. However she realizes it is not him and continues to drown him. Samara's spirit rises from Aidan's nearly dead body and disappears. Rachel is able to revive Aidan, who now appears completely normal. The TV comes on with Samara, and Rachel realizes all Samara wants is a mother. She sacrifices herself and is pulled into the screen and down into the well where Samara died.
Rachel sees the well is open, and begins to climb out. Samara races to try and grab her, but Samara is forced back down into the water. Rachel succeeds in getting out of the well while Samara again races to the top crying "mommy!". Rachel is able to close the big stone lid on top of the well with Samara inside. She then finds herself lost in a misty forest, and arrives at the cliff where Samara's adopted mother committed suicide. She hears Aidan's voice, and jumps off the cliff. It fades to black, and Rachel wakes up on her living room floor close to Aidan. She promises that it is all over, and asks Aidan to call her Rachel, "at least for while".