Sơn ca vẫn hót
Cốt truyện

Câu chuyện bắt đầu vào năm 1995 với điểm nhìn ở ngôi thứ nhất của một người phụ nữ lớn tuổi (không được tiết lộ tên) đang vật lộn với căn bệnh ung thư. Bà sống ở ngoài khơi bờ biển Oregon cùng cậu con trai tên là Julien. Phần lớn thời lượng câu chuyện sau đó diễn ra ở ngôi kể thứ ba, với nhân vật chính là hai chị em Vianne Mauriac (đã có chồng và theo họ chồng) cùng Isabelle Rossignol. Trước năm 1939, gia đình họ sống ở Pháp. Đến khi chiến tranh thế giới thứ hai diễn ra, hai chị em cùng người bố của mình bị chia cắt lẫn nhau. Nội dung câu chuyện sau đó đưa người đọc đi theo hai con đường khác nhau của Vianne và Isabelle.
Người chị cả Vianne đã lập gia đình, hiện đang làm giáo viên và nuôi cô con gái 8 tuổi Sophie trong ngôi nhà mà cô sinh sống từ thời thơ ấu tên là Le Jardin ở thị trấn Carriveau. Chồng của cô tên Antoine, một quân nhân Pháp bị lính Đức bắt làm tù binh. Ở nhà, Vianne và con gái phải đương đầu với sự chiếm đóng của quân Đức sau khi Pháp bại trận. Cô và Sophie cố gắng sinh tồn khi khẩu phần lương thực mỗi lúc một nghèo nàn, những đồng franc ngày càng cạn kiệt do nguồn thu nhập chính là Antoine không còn nữa, cũng như phải hầu hạ bọn sĩ quan của Wehrmacht và SS tại chính ngôi nhà mình. Bên cạnh bị mất việc làm, Vianne còn phải chứng kiến cảnh bắt bớ người Do Thái diễn ra như cơm bữa trong thị trấn. Người sĩ quan đầu tiên đến ở nhà Vianne là Wolfgang Beck, một người đàn ông tốt bụng đã có gia đình. Người thứ hai là Von Richter, một sĩ quan tàn bạo hơn, thường xuyên lạm dụng thể chất và lạm dụng tình dục Vianne.
Nội dung câu chuyện tiếp nối với việc cô bạn thân nhất người Do Thái của Vianne, Rachel de Champlain, bị đưa đến trại tập trung. Cả hai lên kế hoạch trốn thoát nhưng cuối cùng Rachel chết trong làn đạn của bọn Quốc xã. Vianne phải nhận nuôi đứa con trai ba tuổi của Rachel, Ari. Để che giấu thân phận Do Thái của cậu, Vianne đổi tên cậu thành "Daniel". Sau đó, Vianne tham gia che giấu thêm mười chín đứa trẻ Do Thái khác trong trại trẻ mồ côi ở tu viện gần đó. Trong thời gian này, Von Richter liên tục dùng bạo lực và tình dục để kiểm soát Vianne. Khi chiến tranh kết thúc, Antoine trở về từ trại tù binh, nhưng những dư chấn mà chiến tranh để lại với Vianne vẫn còn hiện hữu. Cô mang thai do kết quả từ những vụ cưỡng hiếp của Von Richter. Trong khi đó, Daniel (Ari) được họ hàng Do Thái của mình đưa sang Mỹ sinh sống.
Isabelle, cô em gái trẻ có tính khí bốc đồng, từng có thời gian bỏ nhà theo trai, quyết định dấn thân vào vai trò chống lại sự chiếm đóng của lính Quốc xã. Sau khi bị đuổi khỏi trường, cô đi bộ từ Paris đến Carriveau. Trên đường đi, cô gặp gỡ và làm quen với một người lính kháng chiến tên là Gaëtan Dubois. Tại Carriveau, cô tham gia Kháng chiến Pháp. Thời gian đầu, cô được giao nhiệm vụ phân phát các tài liệu tuyên truyền chống Đức Quốc xã. Sau khi chuyển đến một chi bộ ở Paris, cô lên kế hoạch giúp các phi công của quân Đồng Minh bị Đức bắn rơi trốn thoát đến đại sứ quán Anh ở Tây Ban Nha (lúc bấy giờ là quốc gia trung lập). Với sự giúp đỡ của người bố thất lạc từ lâu và những người lính phe kháng chiến, cũng như sự hỗ trợ từ MI9, cô đã thành công trót lọt trong một vài phi vụ. Trong thời gian hoạt động, cô lấy mật danh là "Sơn ca" và bị quân Đức truy lùng ráo riết. Không may là cuối cùng cô bị bắt, bị lột trần lột truồng tra tấn và cưỡng hiếp. Để cứu con gái, cha cô đã tự thú nhận mình chính là "Sơn ca". Về phần Isabelle, cô bị đưa đến một trại tập trung ở Đức và phải sống trong những điều kiện như địa ngục, bị chuyển từ trại này sang trại khác, nhưng cuối cùng vẫn sống sót đến khi chiến tranh kết thúc. Vianne và Isabelle cuối cùng tái ngộ nhau sau bao ngày xa cách, nhưng Isabelle trong tình trạng rất yếu do bệnh sốt phát ban và viêm phổi. Trong giờ phút lâm chung, Isabelle gặp lại Gaëtan một lần nữa. Hai người hôn nhau trước khi Isabelle chết trong vòng tay anh.
Câu chuyện khép lại với điểm nhìn quay về với người phụ nữ già năm 1995, lúc bấy giờ thì tác giả tiết lộ bà này chính là Vianne. Bà đang trên đường đến Paris để tham dự một sự kiện nhằm tri ân và tưởng nhớ đứa em gái Isabelle, "Sơn ca" của bà. Đi cùng bà là Julien (đứa con hoang của bà với Von Richter). Vianne sau đó gặp lại Ari. Cả ba người tâm sự với nhau với nhiều xúc cảm. Vianne tự nhủ với lòng mình sau chuyến đi sẽ kể hết mọi chuyện về thân thế thực sự của Julien cho anh.