<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="Side-by-side comparison of carry-on travel backpacks." />
    <meta name="ahrefs-site-verification" content="9da673289a75ccdc7e260a19e39224eafecdda8c65109297426c23b1e0a239fa">
    <meta name="p:domain_verify" content="c1cdd4649bd3cfbe98a56d4a8dd56d46" />
    <meta name="msvalidate.01" content="FFCBEFD61370F37F8D6A3E36B600DC99" />

    <title>Compare Carry-On Travel Backpacks - One Bag Travel</title>
    

    <link rel="canonical" href="https://onebag.travel/compare/" />

    
    <link rel="alternate" type="text/markdown" href="/compare/index.md" title="Markdown" />

    
    <meta property="og:site_name" content="One Bag Travel" />
    <meta property="og:type" content="website" />
    <meta property="og:title" content="Compare Carry-On Travel Backpacks" />
    <meta property="og:description" content="Side-by-side comparison of carry-on travel backpacks." />
    <meta property="og:url" content="https://onebag.travel/compare/" />
    <meta property="og:image" content="https://onebag.travel/img/og-default.png" />
    <meta name="twitter:image" content="https://onebag.travel/img/og-default.png" />
    <meta name="twitter:card" content="summary" />
    <meta name="twitter:title" content="Compare Carry-On Travel Backpacks" />
    <meta name="twitter:description" content="Side-by-side comparison of carry-on travel backpacks." />
    

    
    <link rel="preconnect" href="https://res.cloudinary.com" crossorigin>
    <link rel="preload" href="/fonts/zilla-slab-600-latin.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="/fonts/ibm-plex-sans-400-latin.woff2" as="font" type="font/woff2" crossorigin>

    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="manifest" href="/site.webmanifest">

    
    <link rel="stylesheet" href="/css/bootstrap.min.css">
    <script defer src="/js/bootstrap.bundle.min.js"></script>

    
    <script defer src="/js/webmcp.js"></script>

    
    <!-- Google tag (gtag.js) -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=G-K21ZGYKXDC"></script>
    <script>
        window.dataLayer = window.dataLayer || [];
        function gtag() { dataLayer.push(arguments); }
        var gaHost = location.hostname.toLowerCase();
        if (gaHost === 'onebag.travel' || gaHost === 'www.onebag.travel') {
            gtag('js', new Date());
            gtag('config', 'G-K21ZGYKXDC');
        }
    </script>

    <link rel="stylesheet" href="/css/fonts.css" />
    <link rel="stylesheet" href="/css/custom.min.css" />
    <link rel="stylesheet" href="/css/theme.css" />

    
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@graph": [
        {
          "@type": "Organization",
          "@id": "https://onebag.travel/#organization",
          "name": "One Bag Travel",
          "url": "https://onebag.travel/",
          "logo": "https://onebag.travel/android-chrome-512x512.png",
          "description": "A showcase of minimalist packing lists and a searchable database of carry-on travel backpacks, with airline carry-on rules and one-bag travel guides.",
          "sameAs": ["https://patreon.com/OneBagTravel"]
        },
        {
          "@type": "WebSite",
          "@id": "https://onebag.travel/#website",
          "url": "https://onebag.travel/",
          "name": "One Bag Travel",
          "publisher": { "@id": "https://onebag.travel/#organization" }
        }
      ]
    }
    </script>

    
</head>

<body>
    <div class="white-bg shadow topnav-container">
        <div class="container">
            <div class="row">
                <nav class="navbar navbar-expand-lg navbar-light">
                    <a class="navbar-brand" href="/">
                        <img src="/img/newlogosquare-small.png" alt="onebag.travel logo" class="me-2" /> One Bag Travel
                    </a>
                    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button><div class="collapse navbar-collapse" id="navbarNavDropdown">
                        <ul class="navbar-nav">
                            <li>
                                <a href="/packinglists/" class="nav-link ">Packing Lists</a>
                            </li>
                            <li class="nav-item">
                                <a href="/carryons/" class="nav-link active" aria-current=&quot;page&quot;>Travel Backpacks</a>
                            </li>
                            <li class="nav-item">
                                <a href="/airlinecarryonrules/" class="nav-link ">Carry-On Rules</a>
                            </li>
                            <li class="nav-item">
                                <a href="/guides/" class="nav-link ">Guides</a>
                            </li>
                            <li class="nav-item">
                                <a href="/about/" class="nav-link ">About</a>
                            </li>
                            <li class="nav-item">
                                <a href="https://patreon.com/OneBagTravel" target="_blank" rel="noopener" class="nav-link">
                                    <svg height="18" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 1080 1080" style="enable-background:new 0 0 1080 1080;" xml:space="preserve">
                                        <path d="M1033.05,324.45c-0.19-137.9-107.59-250.92-233.6-291.7c-156.48-50.64-362.86-43.3-512.28,27.2  C106.07,145.41,49.18,332.61,47.06,519.31c-1.74,153.5,13.58,557.79,241.62,560.67c169.44,2.15,194.67-216.18,273.07-321.33  c55.78-74.81,127.6-95.94,216.01-117.82C929.71,603.22,1033.27,483.3,1033.05,324.45z" />
                                    </svg>
                                    Patreon
                                </a>
                            </li>
                        </ul>
                    </div>
                </nav>
            </div>
        </div>
    </div>

    
    <main id="main-content" class="container white-bg rounded mt-4 pt-1 pb-1">
        <style type="text/css">
    #compare-root td, #material-table td {
        text-align: center;
        border-collapse: collapse;
    }

        #material-table td { width: 50%; }

    #compare-root td:nth-child(1):not([colspan]),
    #compare-root td:nth-child(3):not([colspan]) {
        width: 90px;
    }

    tr.same td { color: #ccc; }
    #features-col { text-align: center }
</style>

<div class="row">
    <div class="col-12">
        <small><a href="/carryons/">< Back to All Carry-On Travel Backpacks</a></small>
    </div>
</div>

<div id="compare-root">
    <div class="row">
        <div class="col-12">
            <p class="mt-3">Loading comparison…</p>
        </div>
    </div>
</div>

<script src="/js/urlfriendly.js"></script>
<script>
// Client-side compare renderer. Old dynamic URLs (/compare/{aId}/{aSlug}/{bId}/{bSlug})
// without a prerendered page are rewritten here by Netlify; we parse the path
// and render the same structure from the lite dataset.
(function () {
    const AMAZON_ENABLED = false; // Amazon Associates account closed — see _data/features.js
    const root = document.getElementById('compare-root');
    const parts = window.location.pathname.split('/').filter(Boolean);
    // expected: ['compare', aId, aSlug, bId, bSlug]
    // Netlify serves paths in lowercase, so the ids in the URL may not match
    // the stored case; compare them case-insensitively and emit them lowercased.
    const aId = parts[1] && parts[1].toLowerCase(), bId = parts[3] && parts[3].toLowerCase();
    const sameId = (c, id) => String(c.Id).toLowerCase() === id;
    const lid = (c) => String(c.Id).toLowerCase();

    function esc(s) {
        return String(s == null ? '' : s).replace(/[&<>"]/g, c => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]));
    }

    // Shared slug (window.slugify from /js/urlfriendly.js) — identical to the
    // build-time filter, so links resolve to prerendered pages exactly.
    const slug = window.slugify;

    function pickerUI(carryons) {
        const opts = carryons.filter(c => !c.Unavailable)
            .sort((a, b) => a.Name.localeCompare(b.Name))
            .map(c => `<option value="${c.Id}">${esc(c.Name)}</option>`).join('');
        root.innerHTML = `
        <div class="row"><div class="col-12"><h1>Compare Carry-On Travel Backpacks</h1>
        <p>Pick two backpacks to compare side by side.</p></div></div>
        <div class="row mb-4">
            <div class="col-md-5"><select id="selA" class="form-select">${opts}</select></div>
            <div class="col-md-2 text-center align-self-center">vs.</div>
            <div class="col-md-5"><select id="selB" class="form-select">${opts}</select></div>
            <div class="col-12 mt-3"><button class="btn btn-obt" id="goCompare">Compare</button></div>
        </div>`;
        document.getElementById('goCompare').onclick = function () {
            const A = carryons.find(c => c.Id === document.getElementById('selA').value);
            const B = carryons.find(c => c.Id === document.getElementById('selB').value);
            if (A && B && A.Id !== B.Id) {
                window.location.href = `/compare/${lid(A)}/${slug(A.Name)}/${lid(B)}/${slug(B.Name)}/`;
            }
        };
    }

    function dims(c, imperial) {
        const arr = imperial
            ? [c.ImperialWidth, c.ImperialLength, c.ImperialHeight]
            : [c.Width, c.Length, c.Height];
        return arr.slice().sort((a, b) => b - a);
    }

    function specPanel(c) {
        let img = '';
        if (c.Media && c.Media.length) {
            const m = c.Media[0];
            const url = (m.BasePath + 'c_fill,w_400/' + m.Path).replace('.jpg', '.webp').replace('.png', '.webp');
            img = `<img src="${url}" alt="Front facing view of the ${esc(c.Name)}" class="constrained-img img-fluid rounded" />`;
        }
        const d = dims(c, false), di = dims(c, true);
        // Amazon links temporarily disabled (Associates account closed); flip features.amazonLinks to restore
        const amzn = (AMAZON_ENABLED && c.AmazonLink) ? `<p><a class="btn btn-sm ${c.AmazonLink.includes('amzn') ? 'btn-amazon' : 'btn-info'}" href="${esc(c.AmazonLink)}" rel="nofollow sponsored">Check Prices ${c.AmazonLink.includes('amzn') ? 'on Amazon' : ''}</a></p>` : '';
        return `<div class="mt-2">${img}
            <table class="table table-sm mt-2">
                <tr><td><strong>Capacity</strong></td><td>${c.Capacity}L</td></tr>
                <tr><td><strong>Weight</strong></td><td>${c.Weight}kg / ${c.ImperialWeight}lbs</td></tr>
                <tr><td><strong>Dimensions</strong></td><td>${d[0]}x${d[1]}x${d[2]}cm<br />${di[0]}x${di[1]}x${di[2]}in</td></tr>
                <tr><td><strong>✈️ Airline Compatibility</strong></td><td>${c.AirlineCompatibilityPercent}%</td></tr>
                ${c.Price ? `<tr><td><strong>Price</strong></td><td>$${c.Price}</td></tr>` : ''}
            </table>${amzn}</div>`;
    }

    function row(a, b, label) {
        const cls = String(a) === String(b) ? 'same' : 'diff';
        return `<tr class="${cls}"><td>${esc(a)}</td><td><span class="underline">${label}</span></td><td>${esc(b)}</td></tr>`;
    }

    const yn = v => v ? 'Yes' : 'No';
    const cap = v => v > 0 ? v + 'L' : 'None';

    function render(A, B) {
        document.title = `${A.Name} versus ${B.Name} - One Bag Travel`;
        root.innerHTML = `
        <div class="row"><div class="col-12 grey-border-bottom mb-4"><h1>${esc(A.Name)} vs. ${esc(B.Name)}</h1></div></div>
        <div class="row">
            <div class="col-md-3">
                <h2 class="mb-0"><a href="/carryon/${lid(a)}/${slug(a.name)}/">${esc(A.Name)}</a></h2>
                ${A.BrandName ? `<strong>By:</strong> <a href="/carryons/?brands=${encodeURIComponent(A.BrandName)}">${esc(A.BrandName)}</a>` : ''}
                ${specPanel(A)}
            </div>
            <div class="col-md-6 pb-4" id="features-col">
                <h2>Features</h2>
                <table class="table table-sm table-borderless" id="carryon-details-table">
                    <tr><td colspan="3" class="border-bottom"><strong>Storage</strong></td></tr>
                    ${row(A.Compression, B.Compression, 'Compression')}
                    ${row(cap(A.ExpandedCapacity), cap(B.ExpandedCapacity), 'Expanded Capacity')}
                    ${row(A.OpeningType, B.OpeningType, 'Opening')}
                    ${row(A.Passport, B.Passport, 'Passport')}
                    ${row(A.Passthrough, B.Passthrough, 'Passthrough')}
                    <tr><td colspan="3" class="border-bottom"><strong>Carry</strong></td></tr>
                    ${row(A.Backpack, B.Backpack, 'Backpack')}
                    ${row(A.HipBelt, B.HipBelt, 'Hip Belt')}
                    ${row(A.Sternum, B.Sternum, 'Sternum Strap')}
                    <tr><td colspan="3" class="border-bottom"><strong>Inside</strong></td></tr>
                    ${row(A.Laptop, B.Laptop, 'Laptop')}
                    ${row(A.Compartments, B.Compartments, 'Main Compartments')}
                    ${row(A.Organizer, B.Organizer, 'Organizer')}
                    <tr><td colspan="3" class="border-bottom"><strong>Outside</strong></td></tr>
                    ${row(yn(A.HardShell), yn(B.HardShell), 'Hard Shell')}
                    ${row(A.Rainfly, B.Rainfly, 'Rain-fly')}
                    ${row(A.Waterbottle, B.Waterbottle, 'Water Bottle Holder')}
                    ${row(A.WaterResist, B.WaterResist, 'Water Resistant')}
                </table>
                <table class="table table-sm table-borderless" id="material-table">
                    <tr><td colspan="2"><span class="underline"><strong>Material:</strong></span><br /></td></tr>
                    <tr><td>${esc(A.Material)}</td><td>${esc(B.Material)}</td></tr>
                </table>
            </div>
            <div class="col-md-3">
                <h2 class="mb-0"><a href="/carryon/${lid(b)}/${slug(b.name)}/">${esc(B.Name)}</a></h2>
                ${B.BrandName ? `<strong>By:</strong> <a href="/carryons/?brands=${encodeURIComponent(B.BrandName)}">${esc(B.BrandName)}</a>` : ''}
                ${specPanel(B)}
            </div>
        </div>`;
    }

    fetch('/data/carryons-lite.json')
        .then(r => r.json())
        .then(carryons => {
            if (!aId || !bId) { pickerUI(carryons); return; }
            const A = carryons.find(c => sameId(c, aId));
            const B = carryons.find(c => sameId(c, bId));
            if (A && B) { render(A, B); } else { pickerUI(carryons); }
        });
})();
</script>

    </main>

    <div class="site-footer mt-4">
        <div class="container-lg">
            <footer>
                <div class="row pt-2">
                    <div class="col-sm-4 ">
                        <strong>&copy; 2026 - One Bag Travel</strong><br />
                        <ul>
                            <li><a href="/about/">About</a></li>
                            <li><a href="/contact/">Contact</a></li>
                            <li><a href="/terms/">Terms and Conditions</a></li>
                            <li><a href="/privacy/">Privacy Policy</a></li>
                            <li><a href="/api/">For agents &amp; developers</a></li>
                        </ul>

                        <p>
                            <a href="/content/ra7jbxtrb9/ultimate-guide-to-packing-for-carry-on-only-travel/">The Ultimate Guide to Carry-On Only Travel</a>
                        </p>
                        <p>
                            <a href="/content/qsrjlg11e6/best-carry-on-travel-backpacks/">Best Carry On Travel Backpacks</a>
                        </p>
                    </div>
                    <div class="col-sm-4"></div>
                    <div class="col-sm-4 footer-disclaimer">
                        <p>
                            <small>
                                Onebag.travel is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means
                                for sites to earn advertising fees by advertising and linking to Amazon.com.
                            </small>
                        </p>
                        <p><small>*Amazon and the Amazon logo are trademarks of Amazon.com, Inc., or its affiliates.</small></p>
                    </div>
                </div>
            </footer>
        </div>
    </div>

    
</body>
</html>
