Mousa BatarsehFederal Fluid Power review Résumé
Independent review · federalfp.com · Sep 28, 2026

The parts are here.The fieldsaren't.

An independent review of federalfp.com for the E-Commerce Developer & Content Editor role. I read three of the nine sitemap files (54,496 URLs), five category pages, 19 product pages and eight content pages, plus five pages on the sister store patriothyd.com — no logins, no carts. Search by part number works and the structured data is better than most distributors ship. The catalog behind it shows the marks of a bulk ERP import nobody has mapped yet: 20,242 product URLs with no URL key, specs trapped inside title strings, prices printed on parts you can only request a quote for, and supplier logos standing in for photos on 69% of the catalog. Six findings, six working fixes — each one is the job.

Scope served HTML, 3 of 9 sitemap files, robots.txt, JSON-LD Read 19 product pages Logins / carts / RFQs none
Product datasheetBV3-04-NPT · DNP Americas
Name as imported: BV3-04-NPT 1/4" Three way selector Ball valve w/ 1/4" NPT Threads. (5,800 PSI)
AttributeValue
Product NameBV3-04-NPT
SKUBV3-04-NPT-dnp
Weight5.000000
BrandDNP Americas
thread size · port · pressure · material— (inside the name only)
federalfp.com/bv3-04-npt.htmlAs served · Sep 28, 2026
54,496sitemap URLs read (3 of 9 files) — 51,918 products, 2,515 categories, 63 pages
20,242product URLs (37%) with no URL key, blocked by the site's own robots.txt
0 of 19sampled product pages with a thread, port, material or pressure attribute
69%of products share a generic first image; 10 of 19 sampled PDPs show a supplier logo as the only picture
61/100ShelfMark score — would rank 19th of 21 on the Michigan index

Why this review

Why Federal Fluid Power

The posting is a catalog job first: product listings, attributes, images, the ERP-to-Magento sync. A 52,000-SKU distributor's storefront shows exactly how that sync is doing, so I read it before applying.

The posting asks forWhere this review answers it
Product listings: copy, attributes, imagesFindings 2, 4 and 5 — attributes, imagery, titles and descriptions.
Magento 2 ↔ ERP integrationFindings 1 and 3 — URL keys and the price/stock signals an import leaves behind.
Keep product and inventory data accurateThe attribute parser and option normalizer below are the tools I would run first.
Two store views, one installFinding 6 — the Patriot Hydraulics strings on Federal's pages.

Everything here comes from public pages: served HTML, the sitemaps, robots.txt and JSON-LD. I did not log in, add to cart or submit a quote request. Numbers marked sitemap-wide come from the three sitemap files I fetched, not all nine. I'm in Warren — Plymouth is 35 minutes away.

What ships with this page. A workbook with the 29-check scorecard, the six findings with their evidence files, a weekly catalog QA sheet (keyless products, zero prices, RFQ-with-InStock, logo-as-image, duplicate keys) and the 30/60/90 plan. Download the workbook.

First, what works

Three things the store does well

On the same public-page rubric I run on the ShelfMark Michigan index, federalfp.com scores 61 of 100 — it would rank 19th of 21. The technical bones are better than that number: the gaps are in the data.

Part-number search works

Searching FI-TE-04LLMK-W3-MS returns exactly one hit with price and Add to Cart, and the results page is noindex with a canonical to the search root — the right handling for buyers who type manufacturer codes.

Structured data most distributors never ship

Every sampled product page carries Product + Offer with price, currency and availability, shippingDetails (2–5 business days, $9.99, US), a merchant return policy and a BreadcrumbList; category pages add an OfferCatalog. 19 of 19.

The Engineering Toolbox is real content

/engineering-toolbox/ is a 2,570-word in-browser calculator suite — cylinder force, speed and flow, rod buckling, pumps, HPUs, pneumatics, conversions — with Shop Cylinders links back into the catalog, alongside a hose configurator and a product configurator.

Six findings

What the import left behind

Each finding names the page, the count, the duty in the posting it maps to, and the fix inside Magento. Evidence chips name the captured file behind the number.

01ERP → Magento product data

37% of sitemap product URLs have no URL key and are blocked by robots.txt

20,242 of 54,496 URLs (37.1%) across the three sitemap files fetched · 3 of 3 sampled pages return 200 with a robots-blocked canonical

Observed

robots.txt disallows /catalog/product/view/, yet sitemap_005.xml lists 10,879 URLs and sitemap_009.xml 9,363 of the form /catalog/product/view/id/93633/ — products imported without a url_key. Fetching three of them returns 200, and each page's own canonical points at another blocked URL (/catalog/product/view/_ignore_category/1/id/101454/s/804500106/). Google receives twenty thousand URLs it is told not to crawl.

Why it matters

The role owns ERP-to-Magento product data, and a missing url_key on ~20,000 SKUs is exactly the kind of import-mapping gap that silently removes products from search.

The fix

Filter the product grid for URL Key = empty, bulk-update (or re-import a CSV) with url_key = slugified name + SKU, reindex catalog_url_rewrite, regenerate the sitemap and verify no /catalog/product/view/ URLs remain. Keep the Disallow so the numeric duplicates never index.

Evidence
Working fix ↓ robots.txtsitemap_005.xmlsitemap_009.xmlpdp_catalog_product_view_id_101454.htmlpdp_catalog_product_view_id_97434.htmlpdp_catalog_product_view_id_310140.html
02Product attributes & layered navigation

Specs live inside the title string; where attributes exist the values are dirty

18 of 19 PDPs with only Name / SKU / Weight / Brand · 0 of 19 with a thread, port, material or pressure attribute · Cylinders: 6 of 17 Bore values are inch-mark twins, 72 of 142 Bore×Stroke values are x/X twins, 2 values are Excel date serials

Observed

The More Information table on 18 of 19 sampled PDPs is Product Name, SKU, Weight and Brand; thread size, port, material and pressure appear only inside the name, e.g. “BV3-04-NPT 1/4″ Three way selector Ball valve w/ 1/4″ NPT Threads (5,800 PSI).” Where spec attributes exist (Cylinders, 953 items) the filter values are unnormalized: Bore lists 2.5 and 2.5″, Stroke 8 and 8″, Bore×Stroke 2 1/2 x 10 and 2 1/2 X 10, Rod Diameter 1 1/4″ and 1.25, Column Load mixes 11520 lbs with a bare 11. Two values are date serials — Ports (NPTF) = 44628 and Rod Diameter = 44624 — the sign of a fraction like 3/8 converted to a date in a spreadsheet before import. Weights are round defaults (a $3.40 stud coupling weighs 10.000000).

Why it matters

“Keep product data accurate” and “build listings with attributes” is the core of this role; these are the errors a buyer hits when filtering.

The fix

Define thread_size, port_size, material, pressure_rating, pack_qty and mfr_part_number in an attribute set per product line; parse them out of existing names with a one-off script (the parser below is that script); normalize option values — strip inch marks, lowercase x, one unit convention — under Manage Options; re-export the cylinder CSV with text-formatted columns so 3/8 never becomes 44628 again.

Evidence
Working fix ↓ pdp_sample.csvcategory_hydraulics-1_cylinders-1.htmlpdp_bv3-04-npt.htmlpdp_fi-ge-06llm6x1k-w3-ms-6010000421.html
03Inventory & price sync

Price and availability contradict each other — the public symptoms of an unmapped ERP sync

9 of 19 PDPs are Request-Pricing-only, and 8 of those 9 declare InStock in schema · 1 of 19 prints $0.00 · Chairs & Creepers page 1: 20 of 20 unpriced · a $40,000–$50,000 price bucket on couplings

Observed

Unavailable items swap Add to Cart for a Request Pricing and Availability button but still print a price on the PDP ($3.40 on a stud coupling whose listing card hides the price), and their JSON-LD still declares availability InStock. Product 804500106 shows $0.00. No PDP shows a stock quantity or in/out-of-stock text; only the three Patriot-brand valves show a lead time (“Usually Ships Within 1–3 Days”). Whole leaf categories are unpriced, and the Couplings price facet offers a $40,000–$50,000 bucket, so at least one coupling is priced above $40,000.

Why it matters

The posting names the Magento-ERP integration and inventory accuracy; these are what a buyer, and Google, see when quantity and price fields do not map cleanly.

The fix

Map ERP quantity and price into qty, is_in_stock and price on every sync run and key the RFQ module off is_salable; render Magento's stock-status block on PDPs; set Offer availability to OutOfStock or BackOrder (or drop the Offer) when the button is RFQ; add a sync alert for price = 0 or price > $10,000 on fittings.

Evidence
Working fix ↓ pdp_fi-ge-06llm6x1k-w3-ms-6010000421.htmlpdp_catalog_product_view_id_101454.htmlcategory_couplings.htmlcategory_couplings_p2.htmlcategory_chairs-and-creepers.htmlpdp_sample.csv
04Product imagery

Manufacturer logos stand in for product photos on tens of thousands of SKUs

10 of 19 sampled PDPs show a supplier logo as the only image · sitemap-wide, 35,744 of 51,918 products (69%) share a generic first image · 512 have no image at all

Observed

Five Yuken items show alaindustries.jpg, others show dnpamerica.jpg, stucchi.jpg, poclain.jpg or Damanlogo.jpg as the product picture; the two Stauff couplings share one family drawing. In the sitemaps the first image is a file shared by 100 or more products for 35,744 of 51,918 products, and one of six logo files for 14,732. Homepage category tiles carry mismatched alt text (Fittings.png alt=“Hydraulic Oil”).

Why it matters

The role writes copy, attributes and images for the store; a logo where the part should be is the single most visible content gap for a buyer comparing fittings.

The fix

Pull supplier line-drawing and CAD sets (Stauff, Tompkins and Poclain publish them) and import by SKU via Import → Products with base_image, small_image and thumbnail; use a per-family drawing as the fallback instead of the logo; set a Magento image placeholder so the 512 image-less SKUs stop rendering blank; fix the tile alts.

Evidence
pdp_sample.csvsitemap_001.xmlsitemap_005.xmlsitemap_009.xmlpdp_dshg-03-3c4-d24-n1-14-dir-valve-pilot-operated.htmlhomepage.html
05Content editing at catalog scale

One meta description sitewide, code-only titles, and three URL layers for the same part

19 of 19 PDPs + 7 of 7 content pages share one description · 11 of 19 titles are the bare part code · 12 of 17 sitemap product URLs return 200 with a different canonical · 2,368 of 2,515 category URLs (94%) end in -1/-2/-3 · 58 homepage links into an alias category tree

Observed

Every product and content page fetched carries the same description (“Discover a trusted online destination for all your hydraulic requirements…”); product titles are the bare part code with no brand or site suffix (“BV3-04-NPT”). The URL layer is duplicated three ways: sitemap product URLs that canonical elsewhere (one to another SKU's key), category-path product links on listings whose canonical is the root URL, and a /hydraulics-1/ alias tree the homepage links into 58 times. Each page emits two BreadcrumbList blocks.

Why it matters

“Content editor” for a 52,000-SKU catalog means templates, not hand edits, and the crawl budget is currently spent on duplicates of the same part.

The fix

Set product meta templates under Product Fields Auto-Generation ({{name}} | {{brand}} hydraulic {{category}} | Federal Fluid Power, and a description from name + brand + first spec); set Use Categories Path for Product URLs to No with permanent redirects on key change; run a URL-rewrite cleanup so old keys 301 instead of 200; relink the homepage grid to canonical category URLs; remove the second breadcrumb block from the Hyvä template.

Evidence
Working fix ↓ pdp_sample.csvpdp_700018114.htmlpdp_hp-10y-4-50-x10-00-yellow-hose-protector.htmlcategory_couplings.htmlhomepage.htmlsitemap_001.xml
06Multi-store hygiene

Federal's pages carry Patriot Hydraulics' copyright and phone number; policy links go to the wrong pages

2 wrong-brand strings on every page · Shipping and Return Policy both link to /terms/ · 2 “#” footer links · 6 test/junk pages in the sitemap · the same typo on 19 of 19 PDPs · 2 of 2 SKUs duplicated across both domains

Observed

federalfp.com's footer reads “© 2023 Patriot Hydraulics” and the header says Call Us 734-479-9641 — Patriot's number (Federal's is 734-455-1722). Shipping Policy and Return Policy both open the 2,320-word terms page, and a second copy of it exists at /ffp-terms-conditions-of-sale/. Order History and Order Tracking link to #. The sitemap lists /test/, /webkul/, /webkul-seller/, /pictures/ and /privacy-patriothyd/; the 404 page is a clone of the homepage with the homepage title; every PDP prints “ask about our leads times?” Both sampled SKUs exist on patriothyd.com with identical content and self-referencing canonicals on each domain.

Why it matters

These are the first things a customer sees, and each is a ten-minute fix inside Content → Blocks and Pages for someone who owns the multi-store setup.

The fix

Scope the footer and header blocks to the Federal store view (copyright, phone); create real Shipping and Returns pages and relink the footer; disable the test pages and drop them from the sitemap; assign a proper no-route page; fix the typo in the PDP template; choose one canonical domain per SKU or noindex the Patriot copies.

Evidence
Working fix ↓ homepage.htmlterms_shipping-policy.htmlffp-terms-conditions-of-sale.htmlsitemap_009.xmlcareer.htmlbrand_patriot-hydraulics.htmlpatriot_homepage.htmlpatriot_pdp_fi-te-04llmk-w3-ms-6010000456.html

Also counted

Smaller things, for the same sheet

  • Descriptions: 17 of 19 sampled PDPs under 50 words; 7 of 19 just repeat the name.
  • Datasheets: 5 of 19 PDPs have Amasty attachments (Poclain MS11: PDF + DXF + STP); none link a PDF otherwise.
  • Category tree: 2,515 category URLs in one sitemap file, seven levels deep; no empty category found; Couplings alone is 4,114 items over 206 pages.
  • No sort control renders on any listing (the toolbar is Show 20 / 40 / 80 only); Couplings filters are Category, Brand and Price — no thread size, port or material.
  • Page weight: product pages are 504–511 KB of HTML with 68–69 script tags; the search results page is 1.74 MB because a 528-value cross-reference facet renders inline; every page embeds a 250-option country list for the quote modal.
  • Homepage: 21 h1 elements (each category tile is one), no social links, favicon is a JPEG, no og:image.
  • Patriot's sitemap index has 14 files to Federal's 9; product lastmod dates cluster in Aug 2026 (48,233) and Sep 2026 (3,749), consistent with a full-catalog resync.

Working fixes

Six prototypes, built on your catalog

Everything below runs on what federalfp.com served on Sep 28, 2026 — the real product names, the real filter values, the real footer. Each one is the Magento change described in the finding, and two of them are the scripts I would run in week one.

Fix 1 · finding 1

URL-key generator

The three keyless products I fetched, plus the sample set, run through the rule Magento's import needs: url_key = slug(name) + "-" + slug(sku), unique, lowercase, no inch marks. The output is the CSV column the bulk import takes; the blocked /catalog/product/view/id/N/ URLs leave the sitemap once the keys exist and the URL rewrites reindex.

SKUName as importedToday's URLurl_key (generated)

        
Fix 2 · finding 2

Attribute parser

Paste any product name from the catalog and watch thread size, port, pressure, material, dimensions and flow fall into structured attributes. This is the one-off script that populates the attribute set — and the reason the More Information table would stop reading Name / SKU / Weight / Brand.

Rules shown next to each value. Anything the parser can't place stays in the name and is flagged for a human — the script writes a review column, never a guess.

Fix 2 · finding 2

Option normalizer

The Cylinders filter values exactly as the category page serves them, and the same values after one normalization pass: inch marks stripped, x lowercased, fractions restored from Excel date serials, units made consistent. Fractions and decimals meet in one convention (2 1/2 → 2.5, the way Bore already reads). Red = a twin of another value; orange = a date serial.

Fix 3 · finding 3

Stock and price, in agreement

The nine sampled products whose button says Request Pricing, with the price the page prints and the availability the JSON-LD declares — then the Offer each should emit once the RFQ module keys off is_salable and the sync maps quantity.

SKUBrandButtonPrice shownOffer.availabilityConsistent?
Fix 5 · finding 5

Meta template preview

The 19 sampled products run through one title and one description template from Stores → Configuration → Catalog → Product Fields Auto-Generation. Every page unique, every title under 60 and every description under 155 characters — and the same sitewide description retired.

SKUTitle todayTitle (template)CharsDescription (template)Chars

Today (every product)

federalfp.com › bv3-04-npt.html
BV3-04-NPT
Discover a trusted online destination for all your hydraulic requirements at Federal Fluid Power…

With the template

federalfp.com › bv3-04-npt.html
Fix 6 · finding 6

Store-view footer

The footer and header strings as federalfp.com renders them today, and the same blocks scoped to the Federal store view in Content → Blocks — the ten-minute fix a customer notices first.

The scorecard

federalfp.com on 29 public-page checks

The same rubric I run on ShelfMark, the Michigan Storefront Benchmark: findability, catalog, buy path, trust and content, scored 2 / 1 / 0 from what a public page shows. Open a pillar to read the evidence behind every score.

ShelfMark score · federalfp.com

61/100
Grade C · Developing
Would rank
19 of 21 on the Michigan index
Index average
75.9
Verified
29 of 29 checks
Weakest pillar
Buy
Read on
Sep 28, 2026

Same 29 public-page checks as ShelfMark, the Michigan Storefront Benchmark. 2 = meets, 1 = partly, 0 = fails, U = not observable.

Findability · weight 2575% · 12/16
Catalog · weight 3063% · 10/16
Buy · weight 2040% · 4/10
Trust · weight 1570% · 7/10
Content · weight 1050% · 3/6
Findability 12/16 points · 8 verifiedCan search engines and shoppers find the store and its products?
F12HTTPS
All 40 fetched pages served on https; canonical https://federalfp.com; no http redirects seen (captures/index.txt)
F21robots.txt
robots.txt has 2 Sitemap: lines but 'Disallow: /catalog/product/view/' blocks 20,242 of 54,496 product URLs in the 3 sitemap files fetched
F32XML sitemap
sitemap.xml = index of 9 files; sitemap_001.xml holds 19,921 URLs (2,484 categories + 17,437 products with image tags), lastmod 2026-09-18
F41Title tags
Homepage title descriptive; PDP <title> is the bare part code ('FI-TE-04LLMk-W3-MS - 6010000456'); 11/19 sampled titles code-only
F51Meta descriptions
Homepage has a specific description; 19/19 sampled PDPs + 7 CMS pages share one boilerplate 'Discover a trusted online destination…'
F62Canonical tags
Canonical on homepage (https://federalfp.com) and PDP (/fi-te-04llmk-w3-ms-6010000456.html); 3/3 unrewritten PDPs canonical to a blocked URL
F72Structured data
PDP ld+json Product+Offer (price 22.9, InStock, shippingDetails) + BreadcrumbList; caveat: 2 BreadcrumbList blocks, InStock on 8/9 RFQ items
F81Clean URLs
Rewritten URLs hyphenated (/fi-te-04llmk-w3-ms-6010000456.html) but 37% of sitemap products are /catalog/product/view/id/N/; 95% cats end -1
Catalog 10/16 points · 8 verifiedIs the product data complete enough to sell from?
C11Product titles
Names are vendor part codes; 11/19 sampled have no descriptor ('BV3-04-NPT', '804500106'), 8/19 add one ('KS-A37-05-32 - Seal Kit for A37…')
C21Descriptions
Both sampled couplings: 'DIN-Stud Couplings mild steel' (4 words); 17/19 sampled PDPs under 50 words, 7 just repeat the title
C31Imagery
1 gallery image on 14/19 PDPs; 10/19 show a manufacturer logo (alaindustries.jpg, dnpamerica.jpg, stucchi.jpg) as product photo; alt = code
C41Price & availability
Price shown ($22.90) but no stock state/qty; 9/19 PDPs swap Add to Cart for 'Request Pricing and Availability' yet print a price ($3.40)
C51Variants & specs
'More Information' = Product Name, SKU, Weight, Brand only on 18/19 PDPs; thread/port/material live only in title/description; no variants
C62Taxonomy & breadcrumbs
Tree up to 7 levels (2,484 category URLs in sitemap_001); breadcrumb nav + BreadcrumbList on PDP: Home / Adapters & Fittings / Couplings / …
C71Filters & sort
Amasty filters (couplings: Category/Brand/Price; cylinders: Bore, Stroke, Rod Dia.) but no sort control; toolbar only 'Show 20 40 80'
C82Site search
Header search; /catalogsearch/result/?q=FI-TE-04LLMK-W3-MS returns the exact item ('1 Item'); results noindex; page 1.74 MB, 528 facets
Buy 4/10 points · 5 verifiedIs there a clear, trustworthy path from product to purchase?
B11Primary CTA
'Add to Cart' on PDP and listing cards; homepage is a category-tile grid ('Click a category below') with no buy/quote CTA or featured items
B21Shipping & returns
Footer 'Shipping Policy' and 'Return Policy' both link to /terms/ (legal T&C): returns 30 days, no restocking fee if new; no shipping rates
B31Checkout access
'Create an Account' (/customer/account/create/) + 'Checkout as a new customer' popup; guest checkout is a runtime flag, unverifiable
B41Merchandising
Homepage = static category tiles + one banner (HPUBannerFFP.jpg); no new/best-seller/seasonal blocks; indexed /brand/patriot-hydraulics 404s
B50Trust signals
No product/store reviews or ratings, no guarantee/award/secure badges on homepage or PDP; footer has only a theme 'cdz-footer-payment' strip
Trust 7/10 points · 5 verifiedDoes the site prove there is a real, reachable business behind it?
T12Contact
Footer: 14940 Cleat St, Plymouth MI 48170 + Vestaburg + Gaylord addresses, phones (1-734-455-1722), sales@federalfp.com, hours; contact form
T21About
/ffp-federal-fluid-power-info/ is a 126-word 'Services/About Us' block; same text reused on /career-at-federal-fluid-power-inc/
T32Policies
Privacy /ffp-privacy-policy/ (693 words) and Terms /terms/ (+ duplicate /ffp-terms-conditions-of-sale/, 2,315 words); no accessibility page
T40Social
No facebook/linkedin/instagram/youtube links anywhere in homepage or footer HTML (grep on captures/homepage.html returned none)
T52Accessibility basics
'Skip to Content' link (#contentarea) on every page; listing/gallery images alt = product name (server-rendered gallery img alt="" until JS)
Content 3/6 points · 3 verifiedDoes the store publish anything that helps a shopper decide?
N10Blog / news freshness
No blog/news link in nav, footer or the 63 CMS URLs in sitemap_009; no dated articles anywhere fetched
N21Guides / FAQ
Engineering Toolbox (/engineering-toolbox/, in-browser calculators, 2,570 words) + Hose/Product Configurators; no FAQ page
N32Locations / where to buy
Footer 'Locations' lists 3 branches with street address, phone and 'Mon-Fri / 8:00 am - 5:00 pm EST' (Plymouth, Vestaburg, Gaylord)

If I joined

The first ninety days

Keys and templates first, because they unlock the catalog for everything after.

First 30 days

  • URL keys generated and imported for the 20,242 keyless products; sitemap regenerated
  • Store-view footer and header blocks; Shipping and Returns pages; test pages removed
  • Product meta templates live; homepage relinked to canonical categories

First 60 days

  • Attribute set per product line; parser run across the catalog; option values normalized
  • ERP sync mapping for qty, is_in_stock and price; RFQ keyed off is_salable; stock status on PDPs
  • Supplier drawings imported for the top lines; placeholder image set

First 90 days

  • Layered navigation on thread size, port and material for fittings; sort control on listings
  • One canonical domain per SKU between Federal and Patriot
  • Weekly catalog QA report: keyless products, zero prices, RFQ-with-InStock, logo-as-image, duplicate keys

About the reviewer

Mousa Batarseh

Seven years running wholesale and retail storefronts in Metro Detroit: catalogs of 14,000+ SKUs maintained by bulk CSV, platform migrations with redirects intact, product data mapped between an inventory system and the store, and the QA sheets that keep prices and product pages honest. WordPress, WooCommerce, Shopify; HTML, CSS and JavaScript; Python for the scripts above. Magento's admin and import model are the same shape as the catalogs I have run.

Warren, Michigan — 35 minutes from Plymouth · hireme@mousabatarseh.com · mousabatarseh.com · LinkedIn