<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 王磊</title>
    <description>The latest articles on DEV Community by 王磊 (@_172c9b2760d6c5bc1e8966).</description>
    <link>https://dev.to/_172c9b2760d6c5bc1e8966</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3964002%2Fd67ecd17-1334-49df-abff-4386876a8a76.png</url>
      <title>DEV Community: 王磊</title>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_172c9b2760d6c5bc1e8966"/>
    <language>en</language>
    <item>
      <title>A CSV Check for Shopify Stock That Exists but Still Will Not Sell</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Mon, 29 Jun 2026 01:37:52 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-check-for-shopify-stock-that-exists-but-still-will-not-sell-4mih</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-check-for-shopify-stock-that-exists-but-still-will-not-sell-4mih</guid>
      <description>&lt;p&gt;Multi-location inventory can fail in a quiet way: the stock count looks positive, but the product still cannot sell from one location. In Shopify terms, quantity and location activation are separate checks.&lt;/p&gt;

&lt;p&gt;Before changing the same quantity again, I would audit the rows in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confirm the row has a stable product identity: SKU or variant ID.&lt;/li&gt;
&lt;li&gt;Compare On hand against Available for the same location.&lt;/li&gt;
&lt;li&gt;Flag rows where On hand is above zero but Available is blank or zero.&lt;/li&gt;
&lt;li&gt;Check whether the location is actually active for that variant.&lt;/li&gt;
&lt;li&gt;Separate receiving problems from activation problems before importing another quantity change.&lt;/li&gt;
&lt;li&gt;Test the fix on a small set of variants before doing a bulk edit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A useful worksheet has one line per variant and location, with SKU, variant ID, location, On hand, Available, activation state, and a short recommended action. That keeps the decision visible before anyone touches live inventory.&lt;/p&gt;

&lt;p&gt;For a local browser-side pass, this checker can turn an inventory or location CSV into that exception worksheet: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-inventory-location-activation-audit" rel="noopener noreferrer"&gt;Shopify inventory location activation audit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important boundary is that this kind of CSV audit should not silently activate inventory or push changes through an API. It should show which variants need review, then let the merchant decide the bulk edit or manual activation path in Shopify.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>csv</category>
      <category>inventory</category>
    </item>
    <item>
      <title>A CSV Template Check Before Moving Products Between Shopify Stores</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Sat, 27 Jun 2026 01:35:49 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-template-check-before-moving-products-between-shopify-stores-2gkd</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-template-check-before-moving-products-between-shopify-stores-2gkd</guid>
      <description>&lt;p&gt;A product CSV can look valid in one Shopify store and still fail in another store with a missing-column error. That does not always mean the product data is broken. Often the source export and the destination store template are not aligned.&lt;/p&gt;

&lt;p&gt;Before copying hundreds of rows by hand, I like to separate the template problem from the product-data problem.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export a fresh product CSV from the destination store, even if it only contains a test product.&lt;/li&gt;
&lt;li&gt;Compare the header row against the source CSV before changing any product values.&lt;/li&gt;
&lt;li&gt;Keep destination-only columns in place instead of deleting columns that look blank.&lt;/li&gt;
&lt;li&gt;Map values only when the Shopify header name is the same or clearly equivalent.&lt;/li&gt;
&lt;li&gt;Import one or two products first and confirm the intended fields changed.&lt;/li&gt;
&lt;li&gt;Save the mapped file separately so the original export remains untouched.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The easy mistake is treating every CSV as a generic spreadsheet. Shopify product CSV files are closer to templates: the header row tells Shopify what each value means, and small differences in names, spacing, or expected columns can make an otherwise reasonable file fail.&lt;/p&gt;

&lt;p&gt;For a first-pass check, you can use the Shopify product CSV template checker here: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-product-csv-template-checker" rel="noopener noreferrer"&gt;check the product CSV template&lt;/a&gt;. It is most useful before a cross-store import, because it helps you review headers and structure before you spend time moving row data.&lt;/p&gt;

&lt;p&gt;This still does not replace a real destination-store test import. The safest workflow is: template check, small mapped sample, import test, then the full product set.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>A CSV Cross-Check Before Receiving Shopify Purchase Orders</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Wed, 24 Jun 2026 02:44:16 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-cross-check-before-receiving-shopify-purchase-orders-nml</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-cross-check-before-receiving-shopify-purchase-orders-nml</guid>
      <description>&lt;p&gt;When Shopify purchase orders rely on linked transfers, the records can drift even when each screen looks reasonable on its own. A quantity changed on the PO may not match the transfer, and incoming stock may stay invisible until the transfer reaches the right status.&lt;/p&gt;

&lt;p&gt;That creates a practical risk: a buyer sees no incoming quantity, assumes the order is missing, and places another order.&lt;/p&gt;

&lt;p&gt;Here is a lightweight CSV cross-check I would run before receiving stock or making another purchasing decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Keep the source files separate
&lt;/h2&gt;

&lt;p&gt;Do not overwrite the supplier sheet or the transfer import worksheet. Save an immutable copy of each, then create a review file.&lt;/p&gt;

&lt;p&gt;At minimum, keep these fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PO number&lt;/li&gt;
&lt;li&gt;supplier SKU&lt;/li&gt;
&lt;li&gt;Shopify SKU or variant ID&lt;/li&gt;
&lt;li&gt;destination location&lt;/li&gt;
&lt;li&gt;ordered quantity&lt;/li&gt;
&lt;li&gt;transferred quantity&lt;/li&gt;
&lt;li&gt;received quantity&lt;/li&gt;
&lt;li&gt;unit cost&lt;/li&gt;
&lt;li&gt;PO status&lt;/li&gt;
&lt;li&gt;transfer status&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Build a stable row key
&lt;/h2&gt;

&lt;p&gt;A product title is not a reliable identifier. Use a composite key such as:&lt;/p&gt;

&lt;p&gt;PO number + Shopify SKU + destination location&lt;/p&gt;

&lt;p&gt;If SKU is missing, stop and review the row manually. Matching by title alone can merge different variants.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Compare quantities, not just totals
&lt;/h2&gt;

&lt;p&gt;Calculate three differences for every row:&lt;/p&gt;

&lt;p&gt;ordered - transferred&lt;br&gt;
transferred - received&lt;br&gt;
ordered - received&lt;/p&gt;

&lt;p&gt;Then flag rows where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ordered quantity is positive but no transfer row exists&lt;/li&gt;
&lt;li&gt;transfer quantity differs from the current PO quantity&lt;/li&gt;
&lt;li&gt;received quantity is greater than ordered quantity&lt;/li&gt;
&lt;li&gt;the PO and transfer point to different locations&lt;/li&gt;
&lt;li&gt;the same SKU appears twice for the same PO and location&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A grand total can balance while individual variants are still wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Treat status as data
&lt;/h2&gt;

&lt;p&gt;Status is part of the reconciliation, not decoration. Keep PO status and transfer status in separate columns.&lt;/p&gt;

&lt;p&gt;For example, an ordered PO paired with a draft transfer should not be interpreted the same way as an in-transit transfer. If your replenishment process uses incoming inventory, document exactly which transfer status makes a quantity count as incoming.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Re-run the diff after every PO edit
&lt;/h2&gt;

&lt;p&gt;If someone changes quantity, cost, destination, or SKU mapping after the transfer is created, regenerate the comparison. Do not assume the linked transfer inherited the edit.&lt;/p&gt;

&lt;p&gt;The review should end with a short exception table, not another giant spreadsheet. Each exception needs an owner and one next action: correct the PO source, rebuild the transfer row, verify the location, or confirm the receipt.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Test with a small receiving batch
&lt;/h2&gt;

&lt;p&gt;Resolve the exceptions, then receive a small set of SKUs first. Confirm that the expected incoming and on-hand quantities appear before processing the whole delivery.&lt;/p&gt;

&lt;p&gt;If you want a browser-side schema and row check before import, the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-purchase-order-transfer-csv-import-validator" rel="noopener noreferrer"&gt;Shopify purchase order and transfer CSV preflight&lt;/a&gt; can help normalize a worksheet and surface missing SKU, quantity, supplier, tax, and location fields. It does not change Shopify or repair the native PO/transfer workflow; it is simply a safer checkpoint.&lt;/p&gt;

</description>
      <category>data</category>
      <category>productivity</category>
      <category>saas</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>A CSV checkpoint before leaving Stocky purchase orders</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Fri, 19 Jun 2026 01:37:18 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-checkpoint-before-leaving-stocky-purchase-orders-3kel</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-csv-checkpoint-before-leaving-stocky-purchase-orders-3kel</guid>
      <description>&lt;p&gt;Stocky migration is not just an app selection problem. Before choosing a replacement, it is worth getting the purchase-order data into a flat file that humans can audit.&lt;/p&gt;

&lt;p&gt;The risky part is that Stocky and Shopify native purchase orders do not model every detail the same way. A purchase order is not only a list of SKUs. It often carries supplier defaults, received quantities, pack sizes, tax assumptions, foreign-currency costs, destination locations, and notes that explain why a buyer ordered a certain amount.&lt;/p&gt;

&lt;p&gt;A practical pre-migration checkpoint looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Export purchase orders while Stocky access is still available.&lt;/li&gt;
&lt;li&gt;Keep PO-level fields beside every line item: PO number, supplier, status, location, and receipt state.&lt;/li&gt;
&lt;li&gt;Check each item row for SKU, title, ordered quantity, received quantity, cost, and any missing supplier reference.&lt;/li&gt;
&lt;li&gt;Mark rows where receipt status is inferred rather than explicit. Those rows need manual review before you trust a new workflow.&lt;/li&gt;
&lt;li&gt;Rebuild supplier defaults outside the import step: default tax rate, pack size, currency, vendor grouping, and reorder rules.&lt;/li&gt;
&lt;li&gt;Only after the worksheet looks clean should you test one small PO or transfer in the new process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The main goal is to separate rescue from migration. First rescue and flatten the old PO data. Then decide what belongs in Shopify native POs, what belongs in a supplier planning worksheet, and what needs a paid inventory or forecasting system.&lt;/p&gt;

&lt;p&gt;For a narrow first pass, I use a browser-side Stocky purchase-order JSON to CSV rescue checker: &lt;a href="https://shopify-csv.aivismonitor.com/stocky-purchase-order-api-csv-exporter" rel="noopener noreferrer"&gt;https://shopify-csv.aivismonitor.com/stocky-purchase-order-api-csv-exporter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It does not call the Stocky API, does not create Shopify POs, and does not replace purchasing software. It only turns a Stocky purchase-order JSON export into a reviewable CSV so missing SKUs, costs, quantities, receipt states, and possible pagination problems are visible before the migration work starts.&lt;/p&gt;

</description>
      <category>ecommerce</category>
    </item>
    <item>
      <title>A Practical Preflight for Variant MPNs Before Merchant Center Sync</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Wed, 17 Jun 2026 01:36:17 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-practical-preflight-for-variant-mpns-before-merchant-center-sync-m2k</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-practical-preflight-for-variant-mpns-before-merchant-center-sync-m2k</guid>
      <description>&lt;p&gt;When MPN values are visible in Shopify but missing from Google Merchant Center, the problem is often not the value itself. The failure is usually somewhere in the identity chain between a Shopify variant, the field that stores its MPN, and the item ID Google receives.&lt;/p&gt;

&lt;p&gt;This becomes especially confusing when products without variants work correctly while products with variants do not. A product-level MPN can look valid in a CSV and still fail to describe each sellable variant.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Identify the real source field
&lt;/h2&gt;

&lt;p&gt;Start by confirming where the MPN is actually stored.&lt;/p&gt;

&lt;p&gt;Shopify exports may contain the legacy &lt;code&gt;Google Shopping / MPN&lt;/code&gt; column, while the Google &amp;amp; YouTube app can use app-managed fields or variant metafields. Those are not automatically interchangeable. Do not assume that seeing a value in one Shopify screen proves it is present in the feed Google receives.&lt;/p&gt;

&lt;p&gt;For each affected item, record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shopify variant ID&lt;/li&gt;
&lt;li&gt;Variant SKU&lt;/li&gt;
&lt;li&gt;Product title and option values&lt;/li&gt;
&lt;li&gt;The MPN value&lt;/li&gt;
&lt;li&gt;The field or column the value came from&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That small table makes field-source mismatches visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Reconcile at variant level
&lt;/h2&gt;

&lt;p&gt;Treat every sellable variant as a separate row. A shirt with three sizes is not one Merchant Center item with one shared identifier unless the manufacturer truly assigned the same MPN to all three variants.&lt;/p&gt;

&lt;p&gt;Check for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blank MPNs on continuation or variant rows&lt;/li&gt;
&lt;li&gt;One product-level MPN copied across distinct variants&lt;/li&gt;
&lt;li&gt;Duplicate MPNs assigned to unrelated SKUs&lt;/li&gt;
&lt;li&gt;SKUs that changed after the feed connection was configured&lt;/li&gt;
&lt;li&gt;Variant IDs present in Shopify but absent from the exported comparison file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use SKU or variant ID as the reconciliation key. Product title alone is too weak because titles can repeat or change.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Separate missing data from feed eligibility
&lt;/h2&gt;

&lt;p&gt;Merchant Center may omit or reject identifiers for reasons beyond an empty MPN. Before changing data, review whether the item also has a valid brand and GTIN where applicable, and whether the product is custom-made or manufacturer-assigned.&lt;/p&gt;

&lt;p&gt;The goal is to avoid “fixing” a feed by inventing identifiers. An MPN should come from the manufacturer. If no manufacturer MPN exists, the correct feed treatment may be different from supplying a placeholder.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Build a reviewable supplemental feed
&lt;/h2&gt;

&lt;p&gt;If the app-managed feed still does not carry variant MPNs, a supplemental feed can be a controlled workaround. Keep it minimal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;id&lt;/code&gt;: the exact item ID Merchant Center expects&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mpn&lt;/code&gt;: the verified manufacturer part number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before uploading it, compare every supplemental-feed ID against a Merchant Center export or diagnostics report. A correct MPN attached to the wrong item ID will not solve the problem.&lt;/p&gt;

&lt;p&gt;A browser-side &lt;a href="https://shopify-csv.aivismonitor.com/shopify-google-mpn-variant-feed-audit" rel="noopener noreferrer"&gt;Variant MPN and Merchant Center feed audit&lt;/a&gt; can help turn a sanitized Shopify export into a reconciliation worksheet and supplemental-feed draft. It does not connect to Shopify or Google, and it does not submit the feed for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Test a small group first
&lt;/h2&gt;

&lt;p&gt;Choose one product with two or three variants and verify the full path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Confirm each variant's SKU, variant ID, and MPN.&lt;/li&gt;
&lt;li&gt;Confirm the Merchant Center item IDs for those variants.&lt;/li&gt;
&lt;li&gt;Upload or schedule only the small supplemental-feed sample.&lt;/li&gt;
&lt;li&gt;Wait for processing and review item-level diagnostics.&lt;/li&gt;
&lt;li&gt;Expand only after the sample maps correctly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This workflow is slower than blindly re-uploading a full catalog, but it gives you a precise answer: whether the issue is missing variant data, a field-source mismatch, an item-ID mismatch, or Merchant Center eligibility.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>A Safer CSV Workflow for Bulk Shopify Shipping Package Updates</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Fri, 12 Jun 2026 01:35:42 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-csv-workflow-for-bulk-shopify-shipping-package-updates-ih8</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-safer-csv-workflow-for-bulk-shopify-shipping-package-updates-ih8</guid>
      <description>&lt;p&gt;Updating package details across a large Shopify catalog is risky when the source spreadsheet mixes product IDs, dimensions, weights, and package assignments.&lt;/p&gt;

&lt;p&gt;The first important distinction: Shopify's normal product CSV workflow is not a universal package-management importer. Treat your CSV as a planning and validation layer, then apply the reviewed data through Shopify admin or an approved API/app workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Use stable product identity
&lt;/h2&gt;

&lt;p&gt;Include at least one reliable identifier for every assignment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handle&lt;/li&gt;
&lt;li&gt;Variant SKU&lt;/li&gt;
&lt;li&gt;Variant ID, if your downstream workflow supports it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not rely on product title alone. Titles can change and may not be unique.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Separate product weight from package weight
&lt;/h2&gt;

&lt;p&gt;These are different values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product weight describes the variant itself.&lt;/li&gt;
&lt;li&gt;Package weight includes the box, mailer, padding, and other packing material.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mixing them can produce inaccurate carrier-calculated rates. Keep separate columns and label the units explicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Validate every dimension before bulk work
&lt;/h2&gt;

&lt;p&gt;A useful planning sheet should include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Package Name&lt;/li&gt;
&lt;li&gt;Package Length&lt;/li&gt;
&lt;li&gt;Package Width&lt;/li&gt;
&lt;li&gt;Package Height&lt;/li&gt;
&lt;li&gt;Dimension Unit&lt;/li&gt;
&lt;li&gt;Package Weight&lt;/li&gt;
&lt;li&gt;Weight Unit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flag blank, zero, negative, or non-numeric values before applying anything. Also normalize unit choices, such as using one consistent dimension unit per package group.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check duplicate assignments
&lt;/h2&gt;

&lt;p&gt;Duplicate rows are easy to create after spreadsheet joins or copy/paste operations. Group by product identity plus package name and review duplicates before they reach the update workflow.&lt;/p&gt;

&lt;p&gt;A duplicate may be harmless, but it may also mean one variant was assigned twice while another was missed.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Run a small pilot
&lt;/h2&gt;

&lt;p&gt;Before working through the entire catalog:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose one package type and a few representative products.&lt;/li&gt;
&lt;li&gt;Verify dimensions and packed weight against the physical parcel.&lt;/li&gt;
&lt;li&gt;Apply the reviewed data through your chosen Shopify workflow.&lt;/li&gt;
&lt;li&gt;Test a few checkout destinations and shipping services.&lt;/li&gt;
&lt;li&gt;Only then expand to the rest of the catalog.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a browser-side preflight, the &lt;a href="https://shopify-csv.aivismonitor.com/shopify-shipping-package-csv-bulk-editor" rel="noopener noreferrer"&gt;Shopify Shipping Package CSV Bulk Editor&lt;/a&gt; can flag missing identifiers, invalid dimensions or weights, unit problems, and duplicate assignments, then export a local review worksheet.&lt;/p&gt;

&lt;p&gt;The goal is not to automate an uncertain spreadsheet. It is to make the spreadsheet predictable enough that the final admin or API update can be reviewed and tested.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>tutorial</category>
      <category>ecommerce</category>
      <category>csv</category>
    </item>
    <item>
      <title>A quick preflight for Shopify CSV image URLs before import</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Wed, 10 Jun 2026 09:35:18 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/a-quick-preflight-for-shopify-csv-image-urls-before-import-2j52</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/a-quick-preflight-for-shopify-csv-image-urls-before-import-2j52</guid>
      <description>&lt;p&gt;When a Shopify product CSV imports but product photos fail, the problem is often not the CSV syntax. It is usually that Shopify cannot fetch one or more image URLs during import.&lt;/p&gt;

&lt;p&gt;Here is the preflight I use before retrying a large product upload:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check that every Image Src or Variant Image value starts with http or https. Local paths like C:\images\shirt.jpg will not work.&lt;/li&gt;
&lt;li&gt;Open a few image URLs in a private browser window. If the image requires a login, expires, redirects to a file-sharing preview page, or blocks hotlinking, Shopify may not be able to download it.&lt;/li&gt;
&lt;li&gt;Keep image rows grouped with the correct product handle. Sorting a CSV by image column or price can separate continuation image rows from their product.&lt;/li&gt;
&lt;li&gt;Watch for URLs that do not end in a normal image extension. They can work, but they are worth checking manually before a full import.&lt;/li&gt;
&lt;li&gt;Test one small batch first, then verify the product admin after Shopify finishes downloading the images.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a larger file, I also like to extract the image columns into a review worksheet before touching product data. I built a small browser-side checker for that workflow here: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-image-url-reachability-checker" rel="noopener noreferrer"&gt;https://shopify-csv.aivismonitor.com/shopify-csv-image-url-reachability-checker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important part is to fix image reachability before changing product titles, variants, or prices. Otherwise you can spend time debugging the wrong part of the import.&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>csv</category>
    </item>
    <item>
      <title>Shopify CSV Weight Imports: What to Check When the Upload Succeeds but Weight Stays Blank</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Mon, 08 Jun 2026 09:39:50 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-csv-weight-imports-what-to-check-when-the-upload-succeeds-but-weight-stays-blank-mec</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-csv-weight-imports-what-to-check-when-the-upload-succeeds-but-weight-stays-blank-mec</guid>
      <description>&lt;p&gt;A Shopify product CSV import can finish successfully and still leave the product weight blank in the admin. That usually means the row matched poorly, the file is not shaped like Shopify's current export, or the value is in the wrong weight field. I would debug it like a small release instead of retrying the whole catalog.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start from one Shopify export
&lt;/h2&gt;

&lt;p&gt;Export one affected product from Shopify and keep that file unchanged as the baseline. Then make a copy and change only the weight-related value for one variant. This removes a lot of uncertainty from supplier templates, WooCommerce exports, spreadsheet column changes, and old blog-post examples.&lt;/p&gt;

&lt;p&gt;If the one-product export updates correctly, the issue is probably in the custom CSV structure. If the Shopify export still does not update, the problem is more likely variant matching or the product's shipping settings.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Put the display weight into grams for import
&lt;/h2&gt;

&lt;p&gt;For product CSV imports, do not put a pound value such as 26.54 into a random weight column and expect Shopify to infer the unit. Convert the weight to integer grams for the import value, then let Shopify display it in the store's configured unit.&lt;/p&gt;

&lt;p&gt;Also check for renamed or extra columns. A spreadsheet may contain labels like Variant Weight, Variant Weight Unit, Weight value, or Weight unit, but the safest source is the exact header set from the fresh Shopify export you just downloaded.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Confirm the row can match the existing variant
&lt;/h2&gt;

&lt;p&gt;When updating existing products, the weight row still needs enough identity to match the product and variant you intend to update. At minimum, check the Handle and the option columns. If SKUs are part of your workflow, make sure they still line up with the exported product.&lt;/p&gt;

&lt;p&gt;Blank columns are risky in update files. Keep the update file minimal so you do not accidentally overwrite unrelated fields while chasing the weight problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check shipping-related fields
&lt;/h2&gt;

&lt;p&gt;A weight value is not very useful if the product or variant is not treated as a shippable item. Before testing the full import, confirm the affected product requires shipping and that the shipping profile or fulfillment setup is not hiding the weight behavior you expect to see.&lt;/p&gt;

&lt;p&gt;For one test row, I usually check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handle matches the existing product.&lt;/li&gt;
&lt;li&gt;Variant options still identify the right variant.&lt;/li&gt;
&lt;li&gt;Weight is converted to grams.&lt;/li&gt;
&lt;li&gt;Requires shipping is true when the item is physical.&lt;/li&gt;
&lt;li&gt;The file was saved as a clean CSV, not an Excel-only format.&lt;/li&gt;
&lt;li&gt;The import used the intended overwrite/update option.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Scale only after the first row works
&lt;/h2&gt;

&lt;p&gt;Once one variant updates correctly, try 10 rows and compare the admin values with the original export. Only then run the larger file. This gives you a clean rollback point and makes it obvious whether the problem is a single malformed row or the whole CSV template.&lt;/p&gt;

&lt;p&gt;I keep a browser-side checker for this exact weight-import pass here: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-weight-import-fixer" rel="noopener noreferrer"&gt;Shopify CSV weight import fixer&lt;/a&gt;. It is meant for preflight review before you upload the file, not as a replacement for Shopify's final import confirmation.&lt;/p&gt;

&lt;p&gt;The important habit is to test the smallest possible update first. A successful CSV import message only tells you Shopify accepted the file. It does not prove the intended product field changed on the exact variant you meant to update.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>Shopify CSV Product Category Looks Blank? Test the Import, Not Just the Preview</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Sat, 06 Jun 2026 01:35:46 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-csv-product-category-looks-blank-test-the-import-not-just-the-preview-18hd</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-csv-product-category-looks-blank-test-the-import-not-just-the-preview-18hd</guid>
      <description>&lt;p&gt;If you are importing hundreds of products, a blank Product Category field in the Shopify CSV upload preview can make the whole file look broken. The preview is useful, but it is not the final source of truth for every taxonomy field. Before rewriting an 800-row file, isolate whether you have a CSV problem or a preview/display problem.&lt;/p&gt;

&lt;p&gt;Here is the workflow I use.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start from a product Shopify already understands
&lt;/h2&gt;

&lt;p&gt;Create one product manually in Shopify and choose the category with Shopify's own category picker. Then export that product. Do not recreate the category text from memory and do not rely on a copied taxonomy breadcrumb from another page.&lt;/p&gt;

&lt;p&gt;That export gives you two things that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the exact header Shopify is expecting&lt;/li&gt;
&lt;li&gt;the exact category value Shopify wrote for your store at that moment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use that row as the control sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Make a three-row test file
&lt;/h2&gt;

&lt;p&gt;Take the exported row and build the smallest possible CSV:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one untouched exported row&lt;/li&gt;
&lt;li&gt;one row where you only change a harmless field such as title text&lt;/li&gt;
&lt;li&gt;one row that matches the format you plan to use in the full import&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Import those rows first. If the preview shows a blank Product Category but the finished product record has the category after import, you are probably looking at a preview limitation. If the final product is still blank, then the CSV itself needs more work.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Avoid spreadsheet changes while testing
&lt;/h2&gt;

&lt;p&gt;Excel, Numbers, and regional spreadsheet settings can quietly change CSV details. For category and taxonomy troubleshooting, keep the test boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UTF-8 CSV&lt;/li&gt;
&lt;li&gt;no smart quotes&lt;/li&gt;
&lt;li&gt;no copied hidden characters&lt;/li&gt;
&lt;li&gt;no extra spaces in the header&lt;/li&gt;
&lt;li&gt;no mixed category formats in the same test&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once the tiny file works, then expand to 10 rows, then 50 rows, then the full file.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Check the final product page, not only the import screen
&lt;/h2&gt;

&lt;p&gt;The deciding check is the product page after import. Open the imported product, confirm the Product Category field there, and keep a screenshot or row number from the test. That gives you a reference when you scale up the import and need to prove whether the category is actually applying.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Separate CSV validation from Shopify behavior
&lt;/h2&gt;

&lt;p&gt;A local checker can catch obvious risks such as header mismatches, suspicious taxonomy formatting, encoding problems, and batch-size mistakes. It cannot prove how Shopify's preview will render every category. For that, you still need the tiny import test.&lt;/p&gt;

&lt;p&gt;For a quick browser-side preflight before running the controlled import, I keep a small &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-product-category-validator" rel="noopener noreferrer"&gt;Shopify CSV product category validator&lt;/a&gt; that focuses on category/header risk without uploading your catalog to a server.&lt;/p&gt;

&lt;p&gt;The main point: do not let a scary blank preview push you into rewriting the whole file. First prove whether the final product record is wrong. That one distinction can save hours of unnecessary CSV editing.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>Shopify Product CSV Import Checklist: Headers, Prices, Images, and File Size</title>
      <dc:creator>王磊</dc:creator>
      <pubDate>Wed, 03 Jun 2026 01:36:27 +0000</pubDate>
      <link>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-product-csv-import-checklist-headers-prices-images-and-file-size-1jdc</link>
      <guid>https://dev.to/_172c9b2760d6c5bc1e8966/shopify-product-csv-import-checklist-headers-prices-images-and-file-size-1jdc</guid>
      <description>&lt;p&gt;When a Shopify product CSV import fails, the real cause is often not the row Shopify highlights. A single invisible header space, regional price format, private image URL, or oversized file can make a clean-looking spreadsheet fail at upload time.&lt;/p&gt;

&lt;p&gt;Here is the checklist I use before importing a product CSV.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Start with the header row
&lt;/h2&gt;

&lt;p&gt;Shopify maps product data by exact column names. Before editing product rows, check the first row:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no blank header cells&lt;/li&gt;
&lt;li&gt;no leading or trailing spaces&lt;/li&gt;
&lt;li&gt;no duplicate columns after cleanup&lt;/li&gt;
&lt;li&gt;canonical names such as &lt;code&gt;Handle&lt;/code&gt;, &lt;code&gt;Title&lt;/code&gt;, &lt;code&gt;Variant Price&lt;/code&gt;, &lt;code&gt;Variant Inventory Qty&lt;/code&gt;, &lt;code&gt;Image Src&lt;/code&gt;, and &lt;code&gt;Variant Requires Shipping&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you rebuilt the file from a supplier sheet, do not assume labels like &lt;code&gt;Product Name&lt;/code&gt;, &lt;code&gt;Image URL&lt;/code&gt;, or &lt;code&gt;Product Price&lt;/code&gt; will import as expected. Map them deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Keep product handles boring
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;Handle&lt;/code&gt; is the URL-friendly product identity. Use lowercase letters, numbers, and hyphens. Avoid spaces, uppercase-only changes, punctuation, and accidental duplicate handles.&lt;/p&gt;

&lt;p&gt;Duplicate handles are not always wrong. Variant rows for the same product normally share a handle. The risky case is two unrelated products sharing the same handle because a spreadsheet formula or copy-paste step flattened them into the same slug.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Treat variant rows as groups
&lt;/h2&gt;

&lt;p&gt;For products with variants, keep every row for the same handle together while editing or splitting files. Check that option columns line up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Option1 Name&lt;/code&gt; should not be filled while &lt;code&gt;Option1 Value&lt;/code&gt; is blank&lt;/li&gt;
&lt;li&gt;variant rows should not be separated from their parent product rows&lt;/li&gt;
&lt;li&gt;SKU alone is not enough to define the product/variant relationship&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you split a large file, split by product handle groups rather than raw row count.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Normalize prices before upload
&lt;/h2&gt;

&lt;p&gt;Shopify CSV prices should be plain decimal numbers. Watch for values like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$19.99&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;USD 19.99&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1,299.00&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;19,99&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first three can often be cleaned safely. Comma decimal prices need manual review because the comma may mean a decimal separator in one locale and a thousands separator in another.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Check image URLs before blaming Shopify
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Image Src&lt;/code&gt; needs a public &lt;code&gt;http&lt;/code&gt; or &lt;code&gt;https&lt;/code&gt; URL that Shopify can fetch. Local paths, private Google Drive links, Dropbox preview links, and supplier URLs that require a login are common failure points.&lt;/p&gt;

&lt;p&gt;Also confirm that image-only rows still carry the correct &lt;code&gt;Handle&lt;/code&gt;, otherwise images can attach to the wrong product or disappear during the import.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Stay under the 15 MB product CSV limit
&lt;/h2&gt;

&lt;p&gt;Large product CSVs are harder to debug because one failure can hide many smaller issues. If the file is near or over the limit, validate and split it into smaller batches. Again, keep variants and image rows for one handle in the same batch.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Test one small import first
&lt;/h2&gt;

&lt;p&gt;Before importing hundreds or thousands of rows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;export your current products as a backup&lt;/li&gt;
&lt;li&gt;import one product or one handle group&lt;/li&gt;
&lt;li&gt;confirm the product page, variant options, price, inventory, images, and publish status&lt;/li&gt;
&lt;li&gt;then move to a larger batch&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a browser-side scan before upload, I use this free Shopify CSV import fixer to catch headers, handles, prices, booleans, image URL format, UTF-8 issues, and 15 MB size risk: &lt;a href="https://shopify-csv.aivismonitor.com/shopify-csv-import-fixer" rel="noopener noreferrer"&gt;https://shopify-csv.aivismonitor.com/shopify-csv-import-fixer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important habit is to separate structural CSV problems from Shopify admin behavior. Fix the file structure first, then test a small import so you know exactly what changed.&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
