Thừa thắng Ô Mã Nhi và Phàn Tiếp theo sông Bạch Đằng tiến về Vạn Kiếp để hội quân với Thoát Hoan như kế hoạch đã định, bỏ lại phía sau đoàn thuyền chuyển lương nặng nề của Trương Văn Hổ. Ô Mã Nhi cho rằng, thủy quân Đại Việt đã thất bại, đường tiến vào của chúng không còn trở ngại gì, vì vậy đôn đốc thúc quân lính tiến thẳng, không phải hộ tống đoàn thuyền lương.
Lập tức, sai lầm của Ô Mã Nhi bị Trần Khánh Dư phát hiện. Ngay khi không ngăn được thủy binh quân Nguyên, Trần Khánh Dư đã bị vua Trần triệu về trị tội, song ông xin được lập công rồi về chịu tội. Ông thấy các thuyền lương của Trương Văn Hổ vẫn chưa tới, mặc dù, đây không phải là mục tiêu chủ yếu nhưng lại là mục tiêu rất hiểm yếu, bởi đoàn thuyền lương là hy vọng và sức sống của quân xâm lược, quyết định sức hành quân chiến đấu của quân Nguyên trong suốt cuộc chiến tranh.
Tiêu diệt được đoàn thuyền lương là ta đã cắt được dạ dày của địch, sẽ gây nên sự chấn động về tinh thần quân sĩ và thế trận nhà giặc, khiến kế hoạch tiến công của chúng bị đảo lộn. Sai lầm của Ô Mã Nhi đã tạo thời cơ và điều kiện thuận lợi để thủy binh của ta tiêu diệt hoàn toàn đoàn thuyền lương của Trương Văn Hổ. Chớp thời cơ do chính quân giặc mang lại, Trần Khánh Dư nhanh chóng củng cố lực lượng, cho quân bố trí suốt từ Vân Đồn đến Cửa Lục, lập thế trận mạnh dần về phía Cửa Lục.
Yên trí có quân Ô Mã Nhi đi trước, Trương Văn Hổ cho đoàn thuyền lương thực và khí giới nặng nề tiến vào Hạ Long. Khi quân giặc vừa tới Vân Đồn, thủy binh ta từ các vị trí mai phục bất ngờ xông ra tiến công quân địch. Trương Văn Hổ cùng quân lính ra sức chống đỡ và cố thúc đoàn thuyền tiến vào đất liền, nhưng bị quân ta liên tiếp chặn đánh trên chặng đường dài hàng chục kilômét.
Quân địch đến Của Lục (Hòn Gai) thì bị thủy binh của ta đổ ra đánh mãnh liệt, không sao chống đỡ nổi. Phần lớn bị quân ta tiêu diệt, phần bị đắm thuyền, chúng phải đổ cả thóc xuống biển hòng chạy thoát thân. Trương Văn Hổ may mắn thoát chết chạy về đảo Hải Nam. Toàn bộ số lương thực bị nhấn chìm hoặc bị quân ta thu, nhiều quân địch bị bắt. Vua Trần ra lệnh thả những tên bị bắt ở Văn Đồn về loan tin thất trận.
Trong khi đó, trên hướng chủ yếu Quảng Tây - Lạng Sơn, Thoát Hoan cho quân tiến từng bước thận trọng. Sau khi đánh chiếm và củng cố vùng Vạn Kiếp, ngày 27 tháng 1 năm 1285, đại quân địch tiến về Thăng Long. Quân Nguyên vượt sông Hồng tấn công thành Thăng Long. Triều đình và đại quân ta lại tạm thời rút khỏi kinh thành, lui dần xuống hạ lưu sông Hồng. Quân thủy bộ của Thoát Hoan đuổi theo ráo riết.
Xuống đến Thiên Trường vẫn không bắt được triều đình và không giao chiến được với đại quân ta. Thoát Hoan phải trở về Thăng Long củng cố vùng chiếm đóng. Tại đây, đại quân Nguyên đã hội đủ, nhưng thuyền lương thì chờ mãi không thấy đến, việc thiếu lương thực trở nên cấp bách. Trong tình hình nguy cấp Thoát Hoan phái Ô Mã Nhi đem thủy quân ra biển đón Trường Văn Hổ, khi đến Na Bang thì mọi hy vọng không còn, 17 vạn thạch lương đã bị chìm và bị ta chiếm mất ở Vân Đồn, còn Trường Văn Hổ thì đã cao chạy xa bay.
Như vậy, chiến thắng Văn Đồn đã làm thất bại ngay từ đấu kế hoạch bảo đảm hậu cần của quân Nguyên, đẩy chúng vào khó khăn không thể khắc phục được. Đây là một đòn chí mạng đánh đúng vào chỗ hiểm của một đội quân đông tác chiến ở chiến trường xa hậu phương, lương thực không thể chuyển đến một cách nhanh chóng. Một lần nữa đạo quân khổng lồ của Thoát Hoan lại phải đi cướp bóc lương thực để sống, khó có thể tiếp tục chiến tranh. Thoát Hoan quyết định bỏ Thăng Long, đem quân rút về Vạn Kiếp.
Quân Nguyên sau khi hội quân ở Vạn Kiếp đã xây dựng vùng này thành một căn cứ quân sự lớn để từ đó chia quân đuổi theo triều đình và quân đội nhà Trần. Nhưng quân Nguyên không thể bắt được những lãnh đạo chủ chốt, không sao gặp được quân chủ lực nhà Trần. Chúng tàn sát nhân dân, triệt hạ điền trang thái ấp, tàn phá nhiều làng mạc, gây ra trăm ngàn tội ác. Một dải đồng bằng từ Thăng Long đến các lộ Hồng, Khái tiêu điều, xơ xác. Tuy nhiên, địch đi đến đâu cũng gặp vườn không, nhà trống và bị dân địa phương chống lại quyết liệt.
Sau hai tháng, quân Nguyên tuy chiếm được một vùng rộng lớn, nhưng kế hoạch đánh nhanh thắng nhanh, tiêu diệt quân chủ lực và bộ máy lãnh đạo kháng chiến của nhà Trần không thực hiện được. Bấy giờ, quân ta tiến công ở nhiều nơi, quân Nguyên ốm đau và thiếu lương ăn, tinh thần chiến đấu giảm sút. Thoát Hoan cũng như các tướng lĩnh của y đã thấy chán ngán, rã rời, muốn rút quân về. Các tướng Nguyên đề nghị cho rút quân về nước.
Mặc dù lực lượng quân Nguyên còn rất đông, nhưng lại quân là tiến công liên tục, ngày càng đến gần nguy cơ bị tiêu diệt. Thoát Hoan chấp nhận rút quân, nhưng chưa biết rút bằng cách nào. Các tướng Nguyên đề nghị không đi bộ, vì quá chậm, khó an toàn tính mạng. Bài học và mối lo sợ phải “chui vào ống đồng” trước đây vẫn ám ảnh chủ tướng Thoát Hoan. Cuối cùng Thoát Hoan cũng quyết định rút về theo cả đường bộ và đường thủy. Đạo quân bộ do Thoát Hoan chỉ huy rút về theo đường Lạng Sơn; đạo quân thủy do Ô Mã Nhi cầm đầu rút theo đường biển qua sông Bạch Đằng. Chính tại đây quân dân nhà Trần đã thực hiện trận quyết chiến lớn nhất, đưa cuộc kháng chiến chống xâm lược đến thắng lợi hoàn toàn.