Live status of every task in the SEO action plan, with the measured state before work started and the result after.
Prepared for Mr Mateen · Prepared by Hassan Shahbaz
Baseline measured 27 August 2026 · Sections in scope: 2, 3, 4, 5, 7, 9, 11, 12, 13
Every figure below was read from the live site before any change was made. This is what the six month result gets measured against.
Full technical audit of assemblyvintage.com during September. The audit itself is complete, the fixes are what remains.
No baseline existed
358 products, 7 collections, 7 pages, 0 articles mapped. Full catalogue pulled and all 96 Murano products classified by type.
Bare category words. /collections/murano-lighting titled 'Lighting', /collections/lightning titled 'Lamps'. No location or category terms anywhere
SHIPPED 27 Aug. All 7 collection titles rewritten and verified live. Also discovered the theme appends the shop name automatically, so titles must not repeat the brand.
Zero on all 7 collection pages. Product pages inconsistent, one at 323 chars, another empty
SHIPPED 27 Aug. All 7 collections now carry a description between 133 and 149 characters, verified live. Product meta descriptions remain largely unwritten: only the PK11 armchair has a hand written one, added 23 Sep. Product body copy is a separate task and is now done for all 55 writable products. COMPLETED 1 Oct. All 361 products now carry a written SEO description, imported by CSV and verified live on every single product: 361 of 361 correct, zero empty. The one apparent mismatch was Shopify collapsing a double space inside a product title, not an error. What this replaced: NO product had a written SEO description. The theme fell back to the body copy truncated at 320 characters, so Google cut the snippet mid sentence. On a 40 product sample, 30 were over 160 characters, 5 were completely empty, and several Murano products had shipping boilerplate as their entire search result, 'Sold as a pair, please allow 10 to 14 days for delivery'. Live lengths now run 61 to 155 with a median of 132, and nothing exceeds 160. How they were written: 95 use the product's own opening sentence, but ONLY where that sentence is unique across the catalogue. The other 266 are built from the product title plus a type specific line, because their body copy is shared between products. A first attempt that simply reused the lead sentence produced 18 duplicate groups, one repeated 28 times, which is why uniqueness is enforced first. 355 of 361 are unique. The PK11 meta deliberately OMITS the maker and date. Its body still claims '1957 for Fritz Hansen', which is the provenance question outstanding with Mateen, and that page draws more impressions than any other on the site. Its meta describes materials and 'Danish mid-century design' only, so no disputed claim has been published. Diffed before and after on all 361: zero collateral change to titles, body copy, vendors, tags, product types, publish state, prices, SKUs, variants, options or images.
No H1 on any collection page. Homepage H1 exists but is empty
DONE 18 Sep. The collection banner was printing the collection name as an H2 while every other template in the theme (page, article, blog, search, cart) correctly used an H1. So collection pages had no H1 at all. Changed to H1 in sections/main-collection-banner.liquid, keeping the same CSS classes so there is zero visual change. Verified live: every collection page now returns exactly one H1 containing the collection name.
19 of 22 homepage images have no alt attribute at all
Full audit: the Shopify alt field is empty on 1,246 of 1,246 product images (100%). The theme falls back to the product title, so alt text exists in the HTML but describes nothing. Homepage remains the only place with genuinely missing alt.
Not yet measured
Measured: median product hero image 452 KB, largest 1.5 MB, 23 of 25 sampled over 300 KB. 325 of the catalogue's images are PNG, which is the wrong format for photography.
Not yet crawled
DONE 18 Sep. Full internal crawl of 247 URLs harvested from the sitemap and every collection page found exactly one broken internal link: /products/barcelona-daybed, a deleted product still linked from an image carousel tile on the HOMEPAGE. Fixed with a 301 to /products/barcelona-daybed-2, verified live. The carousel tile itself still points at the dead handle and needs the theme editor to repoint properly, so this is a mitigation not a cure. Zero other broken links and zero internal links hopping through a redirect, so internal linking is healthy.
No redirect map exists
Map written for the four collection renames plus 8 product URLs. Shopify requires these to be created in Navigation, URL Redirects before any handle is edited.
/pages/lighting and /collections/murano-lighting both titled 'Lighting'
Confirmed. Also found 88 of 357 products carry under 120 characters of description, which is thin-content risk across a quarter of the catalogue.
The 27 Aug audit found 88 of 357 products carrying under 120 characters of description. A full re-audit on 23 Sep put the true figure at 92, of which 82 were completely empty. Search Console's 51 crawled but not indexed pages line up with these, so a quarter of the catalogue was invisible to Google.
DONE 26 Sep. All 55 products that can be described from Assembly's own data now carry between 200 and 360 characters of original copy, every one verified on the live storefront rather than in the admin. 18 were typed in by hand, the remaining 37 went in by CSV import. Facts come only from what Assembly already records: the weaving region, the glass type, the maker or licence, the dimensions. Nothing about age or provenance was invented. The import was diffed field by field before and after against all 54 products, confirming zero collateral change to titles, prices, SKUs, variants, options, tags, images or publish state. The remaining 37 thin products cannot be written without Assembly, since their titles say only 'Armchair', 'Leather Sofa', 'Bar Stool' or 'Untitled' and they carry no identifying data at all, at AED 1,835 to 30,000 each.
Not yet measured
MEASURED 14 Oct from Search Console field data, which is real visitor timings rather than a lab test. Desktop is clean: 31 good URLs, 0 needing improvement, 0 poor. Mobile has exactly one issue: LCP longer than 2.5 seconds on 14 URLs. No CLS problem, no INP problem, nothing in the poor band. The 14 URLs sit in a single group exemplified by /products/pk11-armchair, the highest impression page on the site, and the group LCP is 2.9 seconds against a 2.5 second threshold. So this is a near miss rather than a failure, and it needs roughly 400 milliseconds. The affected group is product pages, and the cause is image weight, which is exactly what the 1,273 image audit found. Re-exporting the PNG hero images as JPEG is the fix, and that work is already specified and sitting with Sara at /photos. Worth noting the trend: the count has drifted up from about 10 URLs in August to 14 now, so it is getting slowly worse rather than better while the photographs stay as they are.
Homepage 191 KB of HTML with 80 script tags. Field data not yet pulled
COMPLETE 14 Oct. The lab side was done in September: image weight is the primary LCP risk, median 452 KB per hero image with PNGs in the mix. The field data that was missing is now in. Desktop: 31 good, 0 need improvement, 0 poor. Mobile: 17 good, 14 need improvement, 0 poor. The single issue is LCP at 2.9 seconds on a group of product pages. Field data confirms the lab diagnosis exactly. Nothing else is wrong: no layout shift, no interaction delay. It is images, on mobile, on product pages, and it is 400 milliseconds from passing.
Not yet reviewed
EXAMINED 14 Oct, and most of it is not a problem. 405 pages indexed, up from 372 on 14 Sep and 351 at the August baseline. 82 not indexed, across seven reasons. The number that looked alarming was 'Crawled, currently not indexed', up from 28 in September to 47. Reading all 47 URLs explains it: 19 are .atom feed URLs, which Shopify generates automatically for every collection. They are feeds, not pages, and Google correctly declines to index them. The count rose because WE have been creating collections, so this metric getting worse is a side effect of the work, not a symptom. 4 are paginated or cursor URLs, such as /collections/all?page=9. 2 are image files on the CDN. 20 are real product pages. Only those 20 matter, and they are the thin content problem in Google's own words: it crawled them, found nothing worth indexing, and dropped them. Six of the 20 were fixed on 14 Oct as part of the Murano rewrite. Most of the rest are on the list of products with no description that Sara has said she will write. NO ACTION on the 25 feed, pagination and image URLs. They are noise and should be ignored in future readings of this report.
Present and valid. Blog sitemap contains the blog index and no articles
Not yet recorded
Product schema present on product pages
Not yet recorded
Organization present. No LocalBusiness anywhere, so the Al Quoz showroom is invisible to local search
DONE 18 Sep. Added FurnitureStore schema (a specific subtype of LocalBusiness) to the homepage via a new snippet, snippets/structured-data-seo.liquid. Uses Assembly's own published details taken from their site footer: Warehouse 9 - 9 24A St, Al Quoz, Dubai, phone +971 54 340 4142, info@assemblyvintage.com, plus the Instagram and Facebook profiles. openingHoursSpecification was deliberately LEFT OUT rather than guessed, so the one remaining gap is still the showroom hours from Assembly. Validated live: parses as clean JSON.
No BreadcrumbList on any template
DONE 18 Sep. BreadcrumbList now renders on collection and product pages from the same snippet. Collection pages give Home > Collection. Product pages give Home > Product, and Home > Collection > Product when reached through a collection URL. Also added CollectionPage and ItemList schema on collection pages, listing up to 24 products with the true total. Validated live on Marcel Breuer: CollectionPage with 19 of 19 items and the description included.
Correct and self referencing on every page checked
Not yet recorded
No links from products back to collections or designers
SHIPPED. A 'Browse more' block was added to the product template that lists every collection a product belongs to, excluding the homepage feed. Verified live: the PK11 page alone now carries 12 collection links where it previously had none. Roughly 640 internal links across the catalogue, generated rather than hand placed, so new products inherit them automatically.
The lighting collection sits on a URL spelt 'lightning'. Needs a redirect strategy, not a rename
DONE 18 Sep. Handle changed to /collections/vintage-lighting. Shopify offered to create the 301 itself and it was left ticked. Verified live: /collections/lightning returns 301 to the new URL, all 37 products present. Navigation and sitemap updated on their own because menu links reference the collection by ID, so there are no internal redirect hops.
All 357 products have vendor set to 'Assembly Vintage Concept Store' or 'assembly-vintage'. Not one carries its actual designer or manufacturer
WORKED THROUGH 8 Oct. Every product carried the shop name as its vendor, so Google Shopping had no brand for any of the 361. Set the maker wherever it can be read straight off the product title, and left the rest BLANK rather than guessing, on Hassan's instruction: a wrong brand on a piece at up to AED 30,000 is worse than none. 59 products now carry a real maker: Mazzega 19, Gavina 10, Knoll 10, Cassina 9, Castelli 2, Flos 2, Artemide 1, Arflex 1, Thonet 1, Stilnovo 1, Matteo Grassi 1, Vistosi 1, E. Kold Christensen 1. The PK11 is now attributed to E. Kold Christensen, which is only possible because Assembly confirmed the provenance on 8 Oct. That is the single highest impression page on the site. HELD BACK ON PURPOSE, roughly nine products: the two CAB 412, Cab 413, LC2 Armchair Pair, Revers Chair and the Barcelona pieces. All surfaced in maker searches but name the maker only in their body copy, not the title. They are very probably Cassina and Knoll, but that attribution is Assembly's to confirm, not mine to assume. ANSWERED AND SHIPPED 12 Oct. Sara answered all 19 questions on the /questions board on 10 Oct, and 21 more products now carry a real maker: Barcelona pieces x8 to Knoll, designed by Ludwig Mies van der Rohe. CAB 412 x2, Cab 413, LC2 Armchair Pair and the Revers Chair to Cassina. The Revers Chair is by Andrea Branzi. Three paintings plus Master Degree to Serap Taskiran. The artist's name was already sitting in the web address of three of them, but never in the title, the description or the vendor field, which are the three places Google reads. Divided, Other Self, A Place To Fall and Solitudes to B. David. Sara retitled these four herself after answering; they were previously called '02 to '05. The 'Anatolian Carpet' tag is off Master Degree, which is a painting. Maker coverage went from 62 of 366 to 83 of 366. Verified by diffing the whole catalogue before and against after: 21 intended changes, zero unintended. No title, price, description, tag or vendor moved anywhere it should not have. CLOSED, NOT OUTSTANDING: the roughly 200 products with no maker. Sara confirmed these are genuinely 'no name' pieces, where neither Assembly nor the supplier knows the maker. The field stays blank on purpose, it is not a gap to fill. Sara also closed the duplicate question: none of the repeated listings are duplicates. Assembly buys 4 to 8 chairs at a time and keeps sold-out listings online on purpose, to show what they can source. Pieces are priced by what they cost at the time of sourcing, which is why six LC1s sit at three prices.
Not known
Discovered during wave one: the admin can show a field as updated with no warning while the change is still uncommitted. Three of seven saves did not take on the first attempt. Every change must be verified against the live page, not the admin.
Assumed missing alongside Themes
CONFIRMED AVAILABLE 18 Sep. Online Store > URL redirects opens and already holds one redirect. The Section 4 renames are therefore possible.
Found 18 Sep. Six Murano titles spell it Albaster instead of alabaster, while 10 other titles spell it correctly.
DONE 8 Oct via the bulk editor, all six corrected and saved. Three were 'Albaster Murano Glass 3-Tier Tube Chandelier' in Pink, White, and White & Pink. Three were 'Murano chandelier space age, 57 albaster iridescent glasses' in Green, Pink and White. Why it mattered: Assembly holds sixteen alabaster Murano pieces, ten spelt correctly and six not, so those six were invisible for 'alabaster murano chandelier', which is a real buying search. Same class as the 'wall scones' fix in August. Also corrected the five meta descriptions that carried the misspelling, since those were built from the product titles and would otherwise have shown 'Albaster' in the Google snippet even with the title fixed. The sixth product's meta is written from its own body copy and never contained the word. URL handles were deliberately NOT changed, so no redirects are needed. The handles still read 'albaster', which is invisible to buyers and not worth the redirect risk.
Discovered 18 Sep while adding body copy to the Marcel Breuer page. The description saved in Shopify but never appeared on the storefront, so it looked like the theme could not render it.
DONE 18 Sep, and the earlier diagnosis was wrong. The theme renders collection descriptions perfectly well. The default collection template simply had show_collection_description set to false, while the carousel and slideshow templates both had it true. One stray setting, switched on in templates/collection.json. Verified live: the Marcel Breuer and Mies van der Rohe copy now appears under the heading. Every collection page can now carry body content.
Found 18 Sep. The footer email link output href="mailto:mailto:info@assemblyvintage.com", a double prefix, so clicking it did not open a mail client correctly.
FIXED 18 Sep. The theme setting already contained the mailto: prefix and snippets/social-media.liquid prepended a second one. Fixed in the template with remove_first rather than by editing the setting, so it now works whichever way the value is entered in future. Verified live: mailto:mailto: is gone and the plain address resolves.
Noticed 18 Sep. The main navigation shows both 'Lamps' and 'Lighting' as separate items.
DONE 18 Sep. The menu now reads 'Lamps' and 'Murano Lighting' instead of 'Lamps' and 'Lighting'. Two changes were needed because Shopify stores the menu label separately from the collection name: the label was edited in Content, Menus, Main menu, and the collection titles were changed in the bulk editor. The collection titles matter more than they did yesterday, because since the H1 fix the collection title IS the page H1. Verified live: the H1s now read 'Floor and Table Lamps' and 'Murano Lighting' instead of the bare words 'Lamps' and 'Lighting'.
The page title read 'Vintage Art and Original Paintings Dubai' and the meta description said 'Period works sourced internationally'. I wrote both on 27 Aug without checking the products.
CORRECTED 18 Sep. The collection is not vintage at all. It holds original works by living artists, chiefly the Turkish painters Damla Albayrak, born in Ankara in 1991, and Serap Taskiran. Title changed to 'Contemporary Art and Original Paintings Dubai' and the meta rewritten to name the artists. Selling contemporary art as period work is a claim Assembly should never have been making, and it came from me not reading the products.
Surfaced 18 Sep after the H1 fix went live. Collection titles were never meant to be seen as headings, so most are one word.
DONE 18 Sep via the collection bulk editor. Art became Contemporary Art, Objects became Decorative Objects, Rugs became Vintage Persian Rugs, Seating became Vintage Seating and Chairs, Tables became Coffee and Side Tables. Verified live. Crucially the navigation labels were NOT touched and still read Art, Objects, Rugs, Seating, Tables and Lamps, because Shopify stores menu labels separately from collection names. So the menu stays short and scannable while the headings do the descriptive work. All 17 collection pages now carry a meaningful H1.
Found 23 Sep in Search Console. The query 'pk11' returns 2,892 impressions at average position 8.3 and a 0.1% click through rate, which is 2 clicks. 'pk11 chair' adds a further 156 impressions. Assembly holds exactly one matching product, the PK11 Armchair, and it has no dedicated page, no description depth and no designer context.
PART DONE 23 Sep. The product's title tag was the whole problem: it read only 'PK11 Armchair', which says nothing to someone at position 8 deciding whether to click. Now 'Poul Kjaerholm PK11 Armchair Dubai' with a written 153 character meta naming the designer, the 1957 design year, the materials and the 64cm width. Both verified live. A designer page was also built at /pages/poul-kjaerholm, 252 words on Kjaerholm with an internal link to the chair. HELD BACK: the product body copy still says 'in 1957 for Fritz Hansen' while the piece is tagged 1950s. Fritz Hansen only took over the Kjaerholm catalogue in 1982, so the two cannot both be true. Asked Mateen to confirm the maker and year before that sentence is touched, since provenance is the thing Assembly sells. RESOLVED 8 Oct. Assembly confirmed the provenance: designed by Poul Kjaerholm in 1957 and originally produced by E. Kold Christensen, NOT Fritz Hansen, who only took over the Kjaerholm collection in 1982. Period stays 1950s. Assembly updated the product description themselves and it now reads correctly. With the facts confirmed, three changes made on the product: the Year of Production metafield was EMPTY and is now 1957; the page title went from 'Poul Kjaerholm PK11 Armchair Dubai' to 'Poul Kjaerholm PK11 Armchair 1957, Dubai'; and the meta description, which had deliberately omitted the maker and year while the question was open, now reads 'Poul Kjaerholm PK11 armchair, 1957, original E. Kold Christensen production. Stainless steel, lacquered ash and leather. Dubai showroom.' Saved and confirmed by the admin. Why this is the click lever: the query 'pk11' was drawing roughly 3,300 impressions at about a 0.1 percent click through rate. Someone searching a model number wants to know the maker, the year and whether it is original. The snippet now answers all three, and 'original E. Kold Christensen production' is the authenticity signal a collector is looking for. The designer page at /pages/poul-kjaerholm was checked and never carried the wrong maker. It already said 'Kjaerholm's three legged design of 1957', which the confirmation validates. NOT YET VERIFIED ON THE LIVE STOREFRONT: assemblyvintage.com was unreachable from this machine at the time of the edit. Re-check the rendered title and meta when connectivity returns.
The SEO tracker and its seven build-pack pages had NO viewport meta tag at all, so phones rendered them at desktop width and zoomed out. The existing 760px media query could never fire.
DONE 23 Sep. Viewport and charset meta added to build.py and all seven mk*.py generators, so every tracker page now declares it. Added a 430px breakpoint for small phones and overflow safety rules (overflow-wrap, max-width, scrollable tables) to both the tracker stylesheet and the client report. Verified at 375px on both: no horizontal scroll, document width matches viewport width exactly.
Every automated collection matches on text in the product title. Populating product_type on 26 Sep exposed what that costs. Five Mazzega 'glass tube' pieces sit in /collections/murano-tube-chandeliers but are flat backed wall sconces sold in pairs, confirmed from the product photography, so 5 of the 13 products in that collection are the wrong fixture type. In the other direction, two genuine wall lights are missing from /collections/murano-wall-sconces, the red space age eyeball wall lamp and the pair of Mazzega green glass wall lights, because neither title contains the word sconce. The tube chandelier collection is also down from 16 products to 13 as stock has moved.
FIXED 26 Sep, both collections rebuilt on product_type and verified on the live storefront. Murano Wall Sconces is now 'Type is equal to Wall Sconce' and holds 41 products, up from 35, having picked up the five Mazzega tube sconces and the pair of Mazzega green glass wall lights whose titles never said sconce. One product is explicitly excluded, the Red Space Age Eyeball Wall Lamp, which is correctly typed as a wall sconce but is not Murano, so a bare type rule would have put a non-Murano piece in a Murano collection. Murano Tube Chandeliers is now 'Title contains tube AND Type is equal to Chandelier' and holds 8, down from 13, with all five misfiled wall sconces removed. Every product in both collections was checked against its product_type afterwards: zero wrong types in either.
'Master Degree' is an oil painting on canvas by Serap Taskiran, but it carries the tag 'Anatolian Carpet' alongside its art tags. Found on 26 Sep because the tag made an automated classifier read the painting as a rug.
DONE 12 Oct. The 'Anatolian Carpet' tag is off Master Degree, confirmed by Sara as a painting by Serap Taskiran. Its other tags were preserved. It no longer files itself into the rug collection.
Surfaced 1 Oct while writing meta descriptions. Six products carry the bare title 'LC1'. Three pairs are identical in both title and body copy: knoll-wassily-black and knoll-wassily-black-1 at AED 10,000 each, lc1 and lc1-2 at AED 12,000 and 13,000, lc7-beige and lc7-beige-1 at AED 7,500 and 9,000.
PART DONE, AND MOSTLY BY ASSEMBLY. Checked the live catalogue on 14 Oct: the six are no longer titled 'LC1'. Assembly retitled them after answering the questions board on 10 Oct, and they now carry maker and hide, a Cassina vendor and a real description each. They are now: Cassina LC1 Cowhide brown leather (AED 12,000), Cassina LC1 Cowhide black leather 1 (13,000), Cassina LC1 Cowhide black leather pair 1 (13,000), Cassina LC1 Brown Leather (14,500), Cassina LC1 Cowhide black leather 2 (14,500), Cassina LC1 Cowhide black leather pair 2 (14,500). The duplicate pairs question is also closed. Sara answered it on 10 Oct: none of the repeated listings are duplicates, Assembly buys four to eight chairs at a time and keeps sold out listings online on purpose, and pieces are priced by what they cost at the time of sourcing. TWO THINGS STILL WRONG, and neither can be fixed without her. First, 'pair 1', 'pair 2', 'black leather 1' and 'black leather 2' are internal numbering being shown to buyers. The fix is to say single or pair in plain words, which is exactly the naming convention Sara asked us for on 10 Oct and which we still owe her. Second, two genuine conflicts. 'Cassina LC1 Cowhide black leather pair 1' has a description that says natural Cavallino hide, not black, so the title and the copy disagree. And the 13,000 and the 14,500 single black cavallino chairs have nothing in the record to tell them apart. We will not invent a difference, so these go back to Sara with the convention rather than being guessed at.
Assembly reported that the furniture pages loaded slowly on laptops while mobile was fine. Measured on /collections/seating: the desktop page made 417 requests and transferred 3.64 MB, of which 105 requests and 2.54 MB were images. Three faults. First, every product image was downloaded TWICE, once at 352 pixels wide and again at 832, 51 images affected. Second, nothing was lazy loaded: 48 of 51 images had no loading attribute, so the entire grid including each tile's hover image downloaded before the visitor scrolled. Third, 329 of the 1,258 product images are PNG rather than JPEG, affecting 183 products, and 88 are named 'Screenshot'. PNG is for graphics, not photographs, and runs seven to fourteen times heavier: one PNG on this page is 734 KB where the equivalent JPEG is about 50 KB.
FIXED 2 Oct, three changes to snippets/tile-product.liquid, verified live. Product tile images now default to lazy loading, the hover image is always lazy, and the generated srcset uses a denser width ladder so the browser picks one correct size instead of stepping 352 to 832. Desktop, same page, before and after: requests 417 to 353, transfer 3.64 MB to 2.33 MB (down 36 percent), image requests 105 to 48 (down 54 percent), image transfer 2.54 MB to 1.28 MB (down 50 percent), images fetched twice 51 to 1. Mobile also improved: 2.95 MB to 1.44 MB, image requests 54 to 16. Checked that lazy loading did not break rendering: scrolled the full grid and all 24 tiles rendered, zero broken images. NOT geography and NOT the Shopify plan. The HTML served in 0.38 seconds time to first byte from a regional edge, so Italy would be served from a European edge. It was page weight and request count, which punishes slower connections. STILL OPEN and the single biggest remaining win: the 183 products whose photos are PNG. Re-uploading those as JPEG would cut image weight by roughly another 80 percent. That is Assembly's to do.
Observed 8 Oct. assemblyvintage.com and assembly-vintage.myshopify.com both time out on connect, repeatedly over about fifteen minutes, from Hassan's machine. admin.shopify.com answers from the same machine in under half a second, and google.com resolves normally, so it is not general loss of connectivity. A fetch from a second, unrelated network returned connection refused on Shopify's storefront IP, which is a different failure mode and is commonly how Shopify treats datacentre traffic. Shopify's own status page reports all systems operational with no incidents. The same machine reached the storefront normally earlier the same day, and all the page speed measurements were taken through it.
RESOLVED 8 Oct, and it is not the site. The storefront loads normally on StormFiber and times out on PTCL. Confirmed independently before Hassan tested: an external reader outside the network fetched both the homepage and the PK11 page successfully, with the correct titles and copy. DNS is healthy, the apex resolves to Shopify's 23.227.38.65, www resolves through shops.myshopify.com, nameservers are on Cloudflare, and Shopify reports all systems operational. The giveaway was that admin.shopify.com answered in under half a second from the same machine while the storefront timed out: a real outage does not take down one Shopify host and leave the other working. This is the same pattern already documented on two other projects on the same ISP. No change is needed on the store. IMPORTANT, keep separate from the Italy report of 2 Oct. That was slow loading, not failure to load, it came from a different country and a different network, and it was traced to image weight and fixed. Do not merge the two when talking to Assembly.
Shopify's standard category is the field Google Shopping reads to decide what a product is. On the 32 artworks it was close to random. A Place To Fall, an oil painting at AED 15,000, was filed as T-Shirts. Yang was Traditional & Ceremonial Clothing. The Gathering was Card Games. Four were Collectibles, two Uncategorized, and several sat under craft supplies: Crafting Canvas, Cardstock & Scrapbooking Paper, Art & Crafting Materials, Arts & Crafts.
FIXED 12 Oct, all 32. The 21 products typed Painting and the four B. David canvases are now Home & Garden > Decor > Artwork > Posters, Prints, & Visual Artwork > Paintings. The other seven artworks, where the medium is not recorded anywhere and could be sculpture, were set to the Artwork parent rather than guessed at. Found while pushing the maker attributions, not looked for. The same bulk edit screen that was used to set the categories also exposes status, vendor, price and quantity, so the whole catalogue was diffed afterwards: 0 unintended changes across all 366 products. Why it matters: category drives how Google Shopping classifies a product and which searches it can appear in. A painting filed as a T-shirt competes with T-shirts.
Sara confirmed on 10 Oct that every original camera file still exists, and asked how to tell which product photos need replacing. There was no way for her to find out: the information only existed by reading the image filenames on 366 products.
DELIVERED 12 Oct at /photos on this tracker, with the answer posted back to her on the questions board. 188 products carry at least one PNG photo, 344 files in total. 88 of those files, across 29 products, are named 'Screenshot', meaning they were captured off a screen rather than exported from the camera. Those 29 are listed first and are the ones that will look visibly sharper after re-exporting, not just lighter. The remaining 159 products are a weight saving only. Each product links straight to its page on the site and lists the exact filenames to replace. There is a spreadsheet to download for working through offline. The instruction given is to re-export from the original as JPEG, around 2000 pixels on the long edge at quality 80.
The plan called for Murano Table Lamps and Murano Floor Lamps. Neither was ever checked against the catalogue.
BUILT AND LIVE 14 Oct, but not the two that were planned. /collections/vintage-table-lamps, 22 products, and /collections/vintage-floor-lamps, 14 products. Both are automated on product type, so new stock files itself in, the same mechanism that has grown the three rug sub-collections on their own since 1 October. Both carry a written description and a meta description under 160 characters. 'vintage table lamps' is a search Assembly already appears on at position 25.1 with no clicks, so there is a measurable target to move.
Reported by Mateen 24 Oct: searching 'Barcelona daybed' returned 151 products, most of them unrelated. His words: customers need to be able to search and reference a product to see what Assembly has sourced before. Measured, and it was worse than the one example. Searching 'wassily' returned 86 results with a painting and two Anatolian carpets above the Wassily chairs. The gibberish 'qwertyuiopasdf' returned 160 results and 'zzzz' returned 80, so the result count bore no relation to the query at all.
ROOT CAUSED AND FIXED 24 Oct, same day. CAUSE: Shopify's storefront search ORs every word in a query and applies very loose character level fuzzy matching. It is not a data problem and no app was doing it, there is no search app installed. Proof: searching the exact phrase in quotes returned exactly 2, the two Barcelona daybeds, so the catalogue is correct. Only 2 products contain the word daybed and only 8 contain Barcelona, and they are the right ones. The clearest illustration: searching 'wassily' surfaced a painting called Holy, because its description mentions 'Wasli', the paper used in miniature painting. Four letters in common was enough. FIX: snippets/search-scope.liquid rewrites the query on submit so each word has to match a field a buyer actually searches on, the product title, the maker, the type or a tag, and all words must match rather than any. The visitor never sees the rewritten query: the words they typed are carried alongside it and put back into the heading, the search box and the page title on arrival. VERIFIED END TO END by typing into the live search box: Barcelona daybed 151 to 2, both daybeds wassily chair 86 to 5, every one a Wassily PK11 3 to 1 Mazzega chandelier 93 to 9 Felci to 11, all Felci qwertyuiopasdf 160 to 0 zzzz 80 to 0 ONE HONEST CAVEAT. The looseness is Shopify's and predates our work, but writing descriptions for 147 products that previously had none gave the fuzzy matcher more text to latch onto, so it is likely the problem became more visible over the same period. The fix removes it either way. TO UNDO: delete the render tag for search-scope in layout/theme.liquid. Nothing else depends on it. THE URL IS CLEAN TOO. A first version left the rewritten query in the address bar. That is gone. The visitor lands on, stays on and can share /search?q=barcelona+daybed. The rewrite exists only for the instant between the two, and because a clean URL is re-scoped on arrival, a refresh or a shared link gives the correct results rather than the old broken ones. Paging links were the catch: the theme builds them from whatever query ran, so page two was carrying the long version. They are now rewritten to the clean query by parsing each link rather than matching encoded text, because Liquid escapes brackets as %28 and encodeURIComponent leaves them alone. Verified on page 2 of a 40 result search.
Found 24 Oct after Sara reported that searching 'daybed' returned the MVS Chaise Lounge Chair. She was right, and this one is ours. The product carried product_type 'Daybed' from the September classification work. It is a Vitra chaise longue by Maarten Van Severen, and its own description calls it a cantilevered lounge chair.
CORRECTED 24 Oct to Armchair, which is how the other chaises on the site, the Cassina and Alivar LC4s, are already typed. Shopify's search index takes a few minutes to pick up a product change, so the chaise lingers in results briefly after the fix. AUDITED THE REST while there, by testing every product's type against the words in its own title and description rather than by eye. 376 products checked. This was the only type asserted with no support anywhere in the product's own record. The other flags the test raised were the test being crude: abstract artwork titles like Solitudes and Holy, the LC4 chaises typed as Armchair, and a Persian runner typed as a Rug, all of which are right. WORTH SEPARATING from the search fix done the same day. The search engine was returning near random results for everyone. This was one product filed under the wrong word. Both produced the same symptom for Sara, and only one of them was ours.
The homepage has no H1 text and no content headings at all. It carries 313 words against 1,821 to 9,492 for the retail competitors, links to only 10 internal pages, and does not link to Murano at all. Everything here is specified and none of it changes the premium tone. Showroom address and phone were found on the contact page; opening hours are published nowhere.
'Assembly Vintage Concept Store', 30 chars. The Home page title field was completely empty, so the live title was just Shopify falling back to the shop name
SHIPPED 27 Aug. Live as 'Vintage Furniture & Collectible Design Dubai – Assembly Vintage Concept Store', 77 chars. The theme appends the shop name on the homepage too, so no brand was added to the field.
300 chars in the field, truncated by Google, keyword stuffed, and it contained the 'Wall Scones' misspelling. Shopify also served it as the fallback description on every page without its own
SHIPPED 27 Aug. Replaced with a 154 char description. Verified that /pages/contact, /pages/sourcing-1 and /collections/all are now clean, so the misspelling is gone from the whole site.
H1 tag present but completely empty. The only headings on the whole page are 'Your cart' and 'Your cart is currently empty' from the cart drawer
DONE 8 Oct, verified live. The homepage had NO H1 at all: it went logo, navigation, then straight into the product carousels. This is the page taking 328 of 450 organic clicks, 73 percent of all organic traffic, and it was the only significant page on the site still missing one after every collection page got an H1 in September. The theme had no way to set one: the feature-text section renders a richtext field, and Shopify's richtext type strips heading tags, so an H1 could not simply be pasted in. Added a 'Use as the page heading (H1)' checkbox to sections/feature-text.liquid which renders the text as an H1 with the same styling when ticked, defaulting to off so no other page changes. Enabled it on the homepage headline block. The H1 now reads 'Vintage furniture and collectible design in Dubai, curated for the stories each piece carries.' It sits in the same visual position and at the same size as the display line that was already there, so the design is unchanged. COPY NOTE FOR SARA: this replaced 'A collection of stories and memories, thoughtfully curated in one place. Each piece tells a tale, connecting you to the past and enriching your present.' Her 'stories' idea is kept, but the sentence now also says what the business sells and where. Worth her eye, and easy to adjust.
19 of 22 images have no alt attribute
Confirmed against the live page and cross-checked with the catalogue, where the alt field is unset on all 1,246 product images.
313 words against 1,821, 8,374 and 9,492 for the three retail competitors. Existing copy is good but sits in styled divs, not headings
REMOVED 19 Oct at Mateen's request, within minutes of him asking. The homepage is back to 312 words. What was added on 14 Oct: three blocks headed 'What we hold', 'How we source' and 'Visiting the showroom'. They took the page from 312 words to 550 and gave it three real h2 headings plus 8 links into collections. Mateen's objection was aesthetic and procedural: nothing goes on the website without his approval because it affects how the site looks. That is his call and it is a fair one. The lesson is ours, not his: we treated the homepage as a technical surface when it is the front of his showroom. WHAT THIS COSTS, recorded so the decision is informed rather than silent. The homepage is now the fewest words of any site in the competitor set: 312 against 201 for The Odd Piece, 1,835 for WS Living, 6,625 for ebarza and 9,854 for The Wood of Arts. It also loses the only in-body internal links the homepage had. WHAT TO DO INSTEAD. The same content now lives at /pages/vintage-furniture-dubai, where it is not competing with the homepage's look. If Mateen wants the homepage to stay visual, the right answer is to let the category and guide pages carry the words and keep the homepage as a shop window. That is a workable strategy, it just needs saying out loud. NOTHING ELSE ON THE HOMEPAGE WAS TOUCHED by this removal. The headline, the sharing image and the enquiry tracking are all still in place and none of them changes how the page looks.
Only 10 internal collection and page links, and Murano is not one of them: 92 products, a quarter of the catalogue, with no route from the homepage
SHIPPED 14 Oct as part of the homepage copy. 8 distinct collection links plus /pages/vintage-furniture-dubai now sit in the body of the homepage, inside sentences rather than in a nav bar, which is what gives them weight.
Organization only, and its sameAs array holds seven empty strings alongside the two real profiles. No address, no phone, no hours
SHIPPED and verified live: the homepage now emits FurnitureStore JSON-LD with the real Al Quoz address and phone. Note the theme still also emits a generic Organization block, which is harmless, Google reads the more specific type.
Not published anywhere on the site. A buyer cannot tell when they can visit a warehouse address
DONE 23 Sep. Assembly confirmed 11:00 to 19:00, seven days a week, matching their Google Business Profile. Added as openingHoursSpecification to the FurnitureStore schema on the homepage and verified live as valid JSON. This was the last field missing from the local business markup and the one that drives 'open now' results in local search.
og:image and twitter:image were both MISSING, so any link shared to WhatsApp, Instagram or Slack rendered with no preview image
LIVE 14 Oct, and the fix went further than the image. The theme only emitted og:image when Shopify's page_image was set. That covers products and collections, which have their own images, but it left the homepage and every single /pages/ URL with no sharing image at all. Twitter image tags were missing everywhere, on every page type. What shipped: a new 1200x630 image built from the real ASSEMBLY wordmark and the Pink Alabaster Murano chandelier on a warm bone ground, uploaded to Shopify Files; and snippets/meta-tags.liquid rewritten so og:image falls back to it whenever a page has no image of its own, with og:image:alt and twitter:image added for every page type. Verified live: the homepage and /pages/ URLs now serve the branded image at 1200x630, while products and collections keep their own photography. Nothing needed to be uploaded by hand in Preferences in the end, which also means the fallback is in version control rather than in a settings field.
Never considered. Found 18 Sep in the title scan, after the rugs URL rename.
SHIPPED 1 Oct, all three live and verified on the storefront. /collections/vintage-tabriz-persian-rugs, 29 products, built on 'Title contains tabriz OR tabrez' because both spellings exist in the catalogue and a single spelling would have missed pieces. /collections/vintage-anatolian-rugs, 14 products, on 'Title contains anatolia', which catches both 'Anatolian' and the two titled 'Anatolia', Middle Anatolia Konya and West Anatolia Simav. /collections/vintage-kerman-persian-rugs, 11 products, on 'Title contains kerman'. Each carries an H1, body copy of roughly 350 characters plus the standing sourcing line, and a hand written meta description of 131 to 140 characters. Counts were predicted from a live catalogue scan before building and matched exactly on all three. Confirmed beforehand that no non rug product matches any of the three title conditions. The Rugs hub now carries a 'Browse by weaving region' line into all three, rendered from the collection handle in main-collection-banner.liquid, so the pattern now runs Murano by type, Seating by designer and Rugs by region. Deliberately NOT built: Qashqai 2, Kashan 1, Hamadan 1, Sarab 1, Bakhtiyari 1 and runners 2. Too thin to rank and a two product grid reads as empty stock.
Every collection page was a title tag and a product grid with no body content. That was the thin content problem at the heart of the engagement.
DONE 18 Sep. All 15 collection descriptions are written and live, verified on the storefront rather than in the admin. Roughly 50 words each, every fact taken from Assembly's own product data: the rug weaving regions, the Murano glass types and makers, the designer attributions and production licences. Together they cover 618 product listings. Combined with the H1 fix earlier the same day, every collection page now has a heading, body copy, a title tag, a meta description and CollectionPage schema, where in August it had none of those.
Sara reviewed the first set of descriptions on 22 Sep and asked for four changes: her own copy used on four pages, a standing bespoke sourcing line on every page, a maximum of roughly 400 to 450 characters, and designer names kept for search but phrased so they do not read as a complete list of stock.
DONE 23 Sep, all 17 live and verified on the storefront. Sara's own wording used verbatim on Murano Lighting, Lamps, Objects and Tables, trimmed only where her Murano draft ran to 654 characters against her own 450 limit. The other 13 were rewritten so makers read as examples rather than inventory, using 'among others', 'currently including' and 'the selection changes as pieces are sourced'. Bodies now run 309 to 456 characters. The sourcing line is a separate paragraph on every page, since at 147 characters it cannot fit inside a 450 character limit alongside real copy. Worth confirming that reading with Sara.
Found 14 Oct while checking what was still outstanding. The theme wraps the ASSEMBLY logo in an H1 on every page, so now that the homepage has a real written H1 there are two: 'Assembly Vintage Concept Store' from the logo image alt text, and the positioning line.
FIXED 14 Oct. snippets/logo.liquid wrapped the ASSEMBLY logo in an h1 on the homepage, a common theme pattern that made sense when the homepage had no written heading of its own. It now does, so the page was carrying two competing h1s, one of them just the shop name. The logo is now a span on every page type. Verified live: the homepage has exactly one h1, the positioning line.
Eleven pages proposed, nine supported by the catalogue. The headline finding is that four categories already exist under names nobody searches: 65 Persian rugs on /collections/tapestry, 37 lights on /collections/lightning, 92 Murano products on a page titled 'Lighting', and 26 products titled 'scones'. Roughly 128 products, a third of the catalogue, cannot be found. Fixing that requires renames and 301s, not new content.
Does not exist. 138 products would populate it
PUBLISHED AND LIVE 14 Oct at /pages/vintage-furniture-dubai, 860 words, verified on the storefront. This is the primary commercial search for the whole business and it had no page of its own. Search Console shows it at position 5.1 with 428 impressions and 22 clicks over the last three months, all of it landing on the homepage, which is trying to be everything at once. The page covers what vintage actually means here against a reproduction, what Assembly holds by category with live counts, why buying in Dubai beats buying sight unseen from Europe, how sourcing works in small batches, what condition to expect in a piece that is fifty years old, visiting Al Quoz, and delivery. 16 internal links, 8 h2 and 5 h3.
/collections/seating holds 119 products, the largest collection on the site. No H1, no meta description, titled 'Seating'
SHIPPED 27 Aug. Title and meta description live, URL unchanged.
/collections/lightning, misspelt URL, 37 products. The other 92 lighting pieces sit under Murano and are disconnected from it
DONE 18 Sep. Titled 'Vintage Floor and Table Lamps Dubai' on 27 Aug, URL renamed from /collections/lightning to /collections/vintage-lighting on 18 Sep with a verified 301. 37 products. The other 92 lighting pieces still sit under Murano and are not yet cross linked.
/collections/murano-lighting, 92 products, titled 'Lighting', no H1
SHIPPED 27 Aug. Title and meta description live on /collections/murano-lighting.
Does not exist. 47 products confirmed
SHIPPED 27 Aug. Live at /collections/murano-chandeliers with 52 products.
Did not exist. The largest coherent theme in the catalogue
SHIPPED 18 Sep. Live at /collections/italian-vintage-furniture with 114 products, built on Murano OR Cassina OR Italian.
Does not exist. 36 products match on description but no product title uses the phrase
PUBLISHED AND LIVE 14 Oct at /pages/mid-century-modern, 645 words. Checked against the catalogue before writing: 104 products carry a mid century signal, so the page is supported by real stock. Covers what the term properly means, the Bauhaus line through Gavina, Cassina and Knoll, Italian lighting from both Milan and Murano, and what to look at when buying, frame before fabric.
Does not exist. Only 15 products, 3 in titles
PUBLISHED AND LIVE 14 Oct at /pages/scandinavian-design, 528 words. Checked first: only 15 products carry a Scandinavian attribution, so the page says so openly rather than padding. It leads on the PK11 by E. Kold Christensen, the best documented object on the site, and names the Jacobsen Egg, the Panton Wire Cone and the Danish and Swedish seating. The page explains why the group is small, that we buy mostly in Italy and Turkey, and invites a request for specific pieces.
Exists as /collections/tapestry holding 65 Persian rugs. 63 titles say Carpet, 51 say Persian, none say rug or tapestry
DONE 18 Sep. Titled 'Vintage Persian Rugs Dubai | Kerman & Tabriz' with a 146 character description on 27 Aug, URL renamed from /collections/tapestry to /collections/vintage-persian-rugs on 18 Sep with a verified 301. All 65 rugs carried over. This was the largest mis-named group on the site: nobody searches 'tapestry' for a floor rug.
Does not exist. The phrase appears nowhere on the site despite being one of the ten core searches
PUBLISHED AND LIVE 14 Oct at /pages/collectible-design, 704 words. Sets out the four things that make a piece collectible, in order: who designed it, who made it and when, condition and originality, and whether it can be traced. The manufacturer point is the one most buyers miss and it is where the value sits: a Gavina made Wassily and a modern licensed one are the same design and very different objects. It also states plainly what we will not claim. Around 200 pieces are 'no name', confirmed by Sara on 10 Oct, and they are sold on what they are rather than on a name.
Split across /collections/artwork (28) and /collections/decorative-objects (8)
SHIPPED 27 Aug. Both collections given distinct titles and descriptions. The merge into one page is still pending.
No redirects existed. Assumed Shopify would not create them automatically on a handle change, which turned out to be wrong: the collection editor offers the 301 as a pre-ticked checkbox.
2 of 4 executed. tapestry to vintage-persian-rugs and lightning to vintage-lighting both live and verified 18 Sep. Remaining: the artwork plus decorative-objects merge into art-and-objects, which needs a decision before it runs.
8 products. Recommend folding into Vintage Furniture Dubai until stock grows
WORKED THROUGH 14 Oct. The collection holds 8 products, of which 5 are coffee tables, 1 a side table, 1 the Barcelona table and 1 a bar cart. Eight products will not rank for 'tables' and no amount of copy changes that, so the honest fix was to stop aiming at it. The description promised 'dining tables and consoles', which Assembly does not hold. That is now rewritten to describe what is actually there, naming Knoll Laccio by Breuer, the Barcelona table by Mies van der Rohe and the Sormani pieces, and saying plainly that tables turn over faster than anything else and that we will source to request. The meta description was corrected to match. The handle stays /collections/tables. Changing it would cost a redirect and whatever authority it has, to fix something no buyer sees.
Rugs are the second largest category on the site, now around 70 pieces across three sub-collections, and had no editorial at all. The two Murano guides had already shown that a reference page gives the collection pages something authoritative to link to.
PUBLISHED AND LIVE 8 Oct at /pages/guide-to-persian-rugs, 966 words, verified on the storefront. Covers how to tell a hand knotted rug from a machine made one, abrash and natural dyes, what knot count does and does not tell you, the three weaving regions Assembly holds, Persian against Anatolian for a room, what condition is normal in a vintage rug, and care. Seven internal links, into the rugs hub and all three sub-collections. Counts were checked before writing rather than reused: the rug collection has grown from 65 to about 70 since 1 Oct, and the three automated sub-collections have grown on their own from 29, 14 and 11 to 35, 19 and 16. The guide therefore says 'around seventy' and names Tabriz as the largest group instead of quoting figures that will age. COMPLETED 14 Oct. The 'Read:' line is now live on all four rug collection pages. It had been written on 8 Oct and sat unpushed for six days because the Shopify CLI connects through assembly-vintage.myshopify.com, the host that was blocked on PTCL at the time. The connection recovered and it went up with the sub-collection cross-linking work.
Ten designer pages were proposed. Catalogue analysis shows only four have enough inventory to rank: Cassina (16), Knoll (15), Le Corbusier/Jeanneret/Perriand (9) and Mario Bellini (4), alongside Mazzega (18) which came out of the Murano work. De Sede and Vico Magistretti have zero products. Eames, Gae Aulenti, Afra & Tobia Scarpa and Poltronova have one to three each, which is not enough to justify a page. A page with no stock behind it cannot rank and dilutes the rest of the site.
Only 1 product carries Bellini in the title. Not viable as a page
Dropped. One product cannot sustain a collection page.
16 products reference Cassina, 8 in the title
SHIPPED 18 Sep. Live at /collections/cassina with 8 products, mostly LC4 chaise longues.
Only 2 products reference Eames
CHECKED AND DROPPED 18 Sep. Eames: only 2 products carry the name in the title (DAR, Lounge Chair). Three more mention Vitra, who also made Prouve pieces, so they are not Eames. Not enough for a page.
15 products reference Knoll, 10 in the title
SHIPPED 18 Sep. Live at /collections/knoll with 10 products. Wassily, Platner, Womb and Florence Knoll.
Only 2 products, none in a title
CHECKED AND DROPPED 18 Sep. Gae Aulenti: 0 products in the title, 2 mentions buried in descriptions. Not buildable.
3 products
CHECKED AND DROPPED 18 Sep. Poltronova: 3 real products (one is Marco Zanuso for Poltronova). Safari Armchair is Arkana, not Poltronova. Not enough.
ZERO products in the catalogue
CHECKED AND DROPPED 18 Sep. De Sede: 0 matches anywhere, including DS model numbers. Nothing to build.
ZERO products in the catalogue
CHECKED AND DROPPED 18 Sep. Vico Magistretti: 0 matches anywhere, including Atollo, Eclisse, Maralunga and Selene. Nothing to build.
Thought to be 9 products, none in a title. Re-checked 18 Sep: the pieces are titled by MODEL NUMBER, LC1, LC2, LC4 and LC7, which is why a name search returned zero
SHIPPED 18 Sep. Live at /collections/le-corbusier-jeanneret-perriand with 18 products, the deepest designer page on the site. Built on a four value title condition.
Only 1 product
CHECKED AND DROPPED 18 Sep. Afra & Tobia Scarpa: 1 product (Soriana Cassina). Not enough for a page.
Did not exist. 18 pieces in the catalogue, the deepest single maker on the site
SHIPPED 27 Aug. Live at /collections/mazzega-murano-lighting with 19 products. First designer page delivered, and the template for the other four.
Every product says 'Assembly Vintage Concept Store'. Designer collections cannot be automated and Google receives the wrong brand
WORKED THROUGH 8 Oct. Every product carried the shop name as its vendor, so Google Shopping had no brand for any of the 361. Set the maker wherever it can be read straight off the product title, and left the rest BLANK rather than guessing, on Hassan's instruction: a wrong brand on a piece at up to AED 30,000 is worse than none. 59 products now carry a real maker: Mazzega 19, Gavina 10, Knoll 10, Cassina 9, Castelli 2, Flos 2, Artemide 1, Arflex 1, Thonet 1, Stilnovo 1, Matteo Grassi 1, Vistosi 1, E. Kold Christensen 1. The PK11 is now attributed to E. Kold Christensen, which is only possible because Assembly confirmed the provenance on 8 Oct. That is the single highest impression page on the site. HELD BACK ON PURPOSE, roughly nine products: the two CAB 412, Cab 413, LC2 Armchair Pair, Revers Chair and the Barcelona pieces. All surfaced in maker searches but name the maker only in their body copy, not the title. They are very probably Cassina and Knoll, but that attribution is Assembly's to confirm, not mine to assume. ANSWERED AND SHIPPED 12 Oct. Sara answered all 19 questions on the /questions board on 10 Oct, and 21 more products now carry a real maker: Barcelona pieces x8 to Knoll, designed by Ludwig Mies van der Rohe. CAB 412 x2, Cab 413, LC2 Armchair Pair and the Revers Chair to Cassina. The Revers Chair is by Andrea Branzi. Three paintings plus Master Degree to Serap Taskiran. The artist's name was already sitting in the web address of three of them, but never in the title, the description or the vendor field, which are the three places Google reads. Divided, Other Self, A Place To Fall and Solitudes to B. David. Sara retitled these four herself after answering; they were previously called '02 to '05. The 'Anatolian Carpet' tag is off Master Degree, which is a painting. Maker coverage went from 62 of 366 to 83 of 366. Verified by diffing the whole catalogue before and against after: 21 intended changes, zero unintended. No title, price, description, tag or vendor moved anywhere it should not have. CLOSED, NOT OUTSTANDING: the roughly 200 products with no maker. Sara confirmed these are genuinely 'no name' pieces, where neither Assembly nor the supplier knows the maker. The field stays blank on purpose, it is not a gap to fill. Sara also closed the duplicate question: none of the repeated listings are duplicates. Assembly buys 4 to 8 chairs at a time and keeps sold-out listings online on purpose, to show what they can source. Pieces are priced by what they cost at the time of sourcing, which is why six LC1s sit at three prices.
Assumed designer pages needed the designer name in the product title
Re-run 18 Sep across all 361 live products, searching titles, descriptions, tags and vendor. Confirmed for Le Corbusier (LC1/LC2/LC4/LC7 = 18 products). Ruled OUT for the six deferred names: Eames 2 in title, Gae Aulenti 0, Poltronova 3, Afra & Tobia Scarpa 1, De Sede 0, Vico Magistretti 0. None are buildable. The method only works where the model name is already in the product title.
Never considered. Found 18 Sep by scanning which brand words actually appear in product titles rather than guessing designer names.
SHIPPED 18 Sep at /collections/marcel-breuer. 19 products via one automated condition, title contains wassily OR gavina, which captures 15 Wassily chairs and 4 Cesca chairs. Page title 'Vintage Marcel Breuer Wassily and Cesca Dubai' (45 chars) and a 151 character meta description, both verified live. This is now the second largest designer page on the site after Murano, ahead of Le Corbusier at 18.
Never considered. Found 18 Sep in the same title scan.
SHIPPED 18 Sep at /collections/mies-van-der-rohe. 8 published products (9 in admin, one is unpublished) via one condition, title contains barcelona: chairs, an ottoman pair, two daybeds and the low table. Page title 'Mies van der Rohe Barcelona Chairs Dubai' (40 chars) and a 137 character meta description, both verified live. The word 'vintage' was deliberately left out of the title because one daybed is 2025 Knoll production, not a period piece, so a blanket vintage claim would have been wrong. Body copy written from Assembly's own product descriptions, so the 1929 German Pavilion and 1930 daybed and table dates are theirs, not invented.
The strongest opportunity on the site and the only one already proven by data. All 96 Murano products have been analysed and every page is specified to the field in the Murano build pack. Two changes to the plan came out of that analysis: there are zero Murano floor lamps and only two table lamps, while wall sconces (35 products) were missing from the plan entirely. Shopify access is held, so building can start. The remaining dependency is product_type, which is empty on 95 of the 96 Murano products.
Nearest is /collections/murano-lighting, titled 'Lighting', no H1, no meta description
SHIPPED 27 Aug and verified live. Title and meta description in place on the existing hub.
Does not exist. 47 products confirmed
SHIPPED 27 Aug. Built as an automated collection at /collections/murano-chandeliers, matching 52 products on the title condition. Title and meta description set, verified live.
Does not exist. Catalogue analysis found only 2 Murano table lamps
NOT BUILT, ON PURPOSE. Checked the catalogue before building: only 5 products in the entire collection are Murano table lamps. A five product collection is too thin to rank and would add a weak page rather than a useful one. What was built instead is /collections/vintage-table-lamps, 22 products, which the stock does support and which targets a search Assembly already appears on at position 25.1. Revisit this if Murano table lamp stock grows.
Does not exist. Catalogue analysis found ZERO Murano floor lamps
NOT BUILT, AND CANNOT BE. The catalogue contains zero Murano floor lamps. Building the page would have created an empty collection, which is worse than no page. /collections/vintage-floor-lamps was built instead, 14 products, targeting 'antique brass floor lamps dubai' where Assembly currently sits at 14.3. Revisit only if Murano floor lamp stock is bought.
Does not exist. 19 products contain 'tube', but 6 of those are wall sconces
SHIPPED 27 Aug. Live at /collections/murano-tube-chandeliers using two conditions, Title contains 'tube' AND Title does not contain 'sconce', which excluded the 6 sconces and left 16 correct pieces.
Does not exist
PUBLISHED AND LIVE 1 Oct at /pages/guide-to-murano-glass, 865 words. Returns HTTP 200 with the H1 'A Collector's Guide to Murano Glass', a written meta description and the full section structure. Every factual claim about stock comes from a live count of the catalogue on the day, not from memory. All 15 internal link targets across the two guides were checked and every one returns 200, including the cross-links between the guides themselves. The five Murano collection pages now carry a 'Read:' line linking into both guides, rendered from the collection handle in main-collection-banner.liquid, verified on all five, and confirmed absent from Seating and Rugs. So the guides are not orphans and the collections finally have editorial to point at.
Does not exist
Specified. Depends on Assembly supplying detail photography of labels and markings.
Does not exist
PUBLISHED AND LIVE 1 Oct at /pages/history-of-murano-lighting, 757 words. Returns HTTP 200 with the H1 'The History of Murano Lighting', a written meta description and the full section structure. Every factual claim about stock comes from a live count of the catalogue on the day, not from memory. All 15 internal link targets across the two guides were checked and every one returns 200, including the cross-links between the guides themselves. The five Murano collection pages now carry a 'Read:' line linking into both guides, rendered from the collection handle in main-collection-banner.liquid, verified on all five, and confirmed absent from Seating and Rugs. So the guides are not orphans and the collections finally have editorial to point at.
No product links to a Murano collection or guide. The original note that 95 of 96 have an empty product_type no longer applies: product_type was populated across the whole catalogue on 26 Sep.
DONE 1 Oct, verified live. Two theme changes, both pushed as single files with the Shopify CLI. 1. Every product page now carries a 'Browse more' block linking to the collections that product belongs to. All 361 products are in at least one collection, so nothing is orphaned. Average 1.79 links each, which is roughly 640 new internal links across the catalogue. Verified on a random sample of 60 products: the block rendered on 60 of 60, averaging 1.77 links, matching the prediction. The 92 Murano pieces each get 2 to 4 links, always including one to the Murano Lighting hub, which is the orphan problem this task was opened for. 2. The two hub pages now link down to their children. Murano Lighting carries 'Browse by type' to Murano Chandeliers, Murano Wall Sconces, Murano Tube Chandeliers and Mazzega Murano Lighting. Vintage Seating and Chairs carries 'Browse by designer' to Marcel Breuer, Mies van der Rohe, Le Corbusier Jeanneret & Perriand, Knoll and Cassina. Rendered from the collection handle in main-collection-banner.liquid, NOT written into the collection descriptions, so Sara's approved copy is untouched and the links cannot drift out of sync with the collections. Other collections show nothing, confirmed on Rugs and Art.
Does not exist. 35 products found in the catalogue, the second largest Murano segment and absent from the original plan
SHIPPED 27 Aug. Live at /collections/murano-wall-sconces, automated on 'Title contains sconce', 37 products. Title and meta set, verified live.
Does not exist. 18 Mazzega pieces in the catalogue
SHIPPED 27 Aug. Live at /collections/mazzega-murano-lighting, automated on 'Title contains Mazzega', 19 products. Doubles as the first Section 5 designer page.
26 products titled 'wall scones'. 18 need no URL change, 8 have 'scone' in the handle and need a 301
SHIPPED 27 Aug. All 26 corrected via the Shopify bulk editor and verified live: zero products now titled 'scone', 35 correctly titled 'sconce'. No URL handles were touched, so no redirects were needed.
95 of 96 Murano products had an empty product_type, and so did the rest of the store: 360 of 361 products were blank, with a single one reading 'lighting'. That blocks automated collections, storefront filtering and the product_type attribute in the Google Shopping feed.
DONE 26 Sep. All 361 products now carry a product_type, verified live, across 25 types. The largest are Rug 65, Armchair 64, Chandelier 48, Wall Sconce 42, Chair 37, Table Lamp 22, Painting 21, Floor Lamp 14. The 92 Murano lighting pieces resolve to 48 chandeliers, 41 wall sconces and 3 ceiling lights. 303 were classified from the product title, 58 from Assembly's own descriptions and collection membership, and 10 ambiguous lighting pieces were settled by looking at the product photography rather than guessing. The finished mapping was reconciled against Assembly's own collection counts, which matched exactly on Seating at 119 and Chandeliers at 48, and that cross-check caught four real errors before import. Diffed before and after on all 361 products: zero collateral change to titles, descriptions, vendors, tags, prices, SKUs, variants, options, images or publish state.
No page existed for Kjaerholm, and a collection was the wrong vehicle: Assembly holds exactly one Kjaerholm piece, so a collection grid would have shown a single item and read as thin stock.
SHIPPED 23 Sep at /pages/poul-kjaerholm as a CONTENT page rather than a collection, which is the right answer for one product. 252 words on Kjaerholm, his move from cabinetmaking into steel, the PK numbering and the PK22 and PK24, with an internal link through to the PK11 armchair and the showroom hours. Title 'Poul Kjaerholm Furniture Dubai' (29 chars), 148 character meta. The handle needed manual correction because Shopify stripped the ae ligature to 'poul-kj-rholm'.
Assembly holds 41 Murano wall sconces and has a collection page for them, yet sat between position 26 and 39 on every sconce search: 'murano wall sconces' 101 impressions at 26.7, 'murano glass wall sconce' 43 at 29.8, 'murano glass wall sconces' 31 at 34.3, 'murano sconces' 25 at 36.4, 'murano wall lights' 41 at 38.9. Roughly 260 impressions a quarter and almost no clicks. The collection page itself was not the problem. It already had a good title, a 149 character meta description, a correct H1, 534 words of copy naming every glass form, links to both Murano guides, and valid CollectionPage and ItemList schema.
ROOT CAUSE FOUND AND FIXED 14 Oct. The problem was underneath the collection, not on it. All 41 sconce products shared just 7 distinct bodies of text between them, and every one of those was shipping boilerplate. 37 of the 41 read only 'Sold as a pair' plus 'Please allow approximately 10 to 14 days for delivery'. Not one of the 41 carried a single sentence describing the object. Google was being shown 41 near identical thin pages under one collection, which drags the whole cluster down however good the collection page is. WHAT SHIPPED: 41 unique product descriptions and 41 unique SEO descriptions, imported by CSV and verified live. Body length went from 122 to 211 characters of boilerplate to 504 to 737 characters of real copy, 41 of 41 distinct, zero still boilerplate. SEO descriptions run 99 to 125 characters, 41 of 41 unique. The copy was written from the glass vocabulary the titles already carried, which turned out to be rich and accurate: Felci the fern leaf form, Poliedri the faceted polyhedral blocks, Rondini the swallow form, triedri and quadriedri prisms, alabastro discs, blown tube rows, and lattimo petals. Element counts and colours come from the titles. Mazzega is named only on the nine products that carry it. Image alt text was set on all 41 at the same time, describing the piece rather than stuffing keywords. Verified per product: 41 images, 41 with alt, no duplicates created.
You could navigate down from Murano Lighting into Wall Sconces or Chandeliers, and from Vintage Persian Rugs into Tabriz, Anatolian or Kerman, and then there was nowhere to go. The child pages linked to nothing except the products in them.
FIXED 14 Oct in sections/main-collection-banner.liquid. Every sub-collection now carries an 'Also in' line linking sideways to its siblings and back up to its parent: the four Murano children, the three rug regions, and the two new lamp collections. Vintage Lighting gained a 'Browse by type' line to the two new lamp collections. Verified live. The Murano sconces page went from 6 outbound collection links to 10. The same push finally landed the rug guide link, which had been written on 8 Oct and could not be pushed because the Shopify CLI connects through the host that was blocked on PTCL. All four rug collections now carry 'Read: A Buyer's Guide to Vintage Persian and Anatolian Rugs'.
Checked 14 Oct while working on the sconces. No product image on the site carried alt text. Alt text is what Google Images reads, and it is what a screen reader announces, so this is an accessibility gap as much as a search one. It matters more here than on most catalogues, because Murano glass is bought on how it looks and image search is a genuine way in.
COMPLETE 14 Oct. Every product image on the site now carries alt text: 366 products, 1,273 images. Done in three passes: the 41 Murano wall sconces, then the 48 chandeliers and 3 ceiling lights, then the remaining 274 products and 1,178 images in one import. Alt describes the piece rather than stuffing keywords, names the maker where one is recorded, and where a product carries more than one photograph the alt is numbered, 'view 2 of 6', so the images are distinguishable rather than identical. Verified by sampling product endpoints after each import: image counts unchanged, so nothing was duplicated, and every sampled image carries alt. TWO CAUTIONS WORTH KEEPING. Shopify's collection level products.json has no alt field at all, so it cannot be used to audit this and an early reading taken from it was not evidence either way. Use the per product /products/<handle>.json endpoint. And replacing an image replaces the media and loses its alt, so the 188 products on the photo re-export list will need alt re-applied after Sara swaps the files.
Found 14 Oct while setting alt text on the 48 chandeliers and 3 ceiling lights. The same audit that was run on the sconces was run here: 51 products share only 18 distinct bodies of text, and 21 of the 51 have no description at all, only the shipping line. Body length runs from 121 characters to 508, median 225.
FIXED 14 Oct. All 51 now carry unique copy: 51 distinct bodies where there were 18, zero still boilerplate where there were 21, and body length has gone from 121 to 508 characters up to 437 to 1,097. Approach differed from the sconces on purpose. 30 of the 51 already carried copy written by Assembly, duplicated between two and four times each. Rather than overwrite their writing, their opening paragraph was kept and a distinguishing paragraph inserted after it, built from the form, the element count and the colour already named in each title. The 21 with nothing got fresh copy. The vocabulary came from the titles: Palmette palm blades, Poliedri faceted blocks, quadriedri prisms, Felci leaves, Rondini swallows, necktie blades, lattimo drops, alabastro discs, iridescent space age glass and tiered forms. Mazzega is named only where the title carries it. THE WHOLE MURANO HUB NOW HAS UNIQUE COPY: 92 products, 92 distinct descriptions, zero thin pages.
Shopify access is held. The remaining items in this section are the content dependencies that only Assembly can supply: provenance, photography of markings and labels, restoration examples, buying team knowledge and the sold piece archive. Each one blocks the depth of Sections 4, 5 and 7, not their publication.
Not yet granted
Not yet recorded
Not yet supplied
Not yet recorded
Not yet supplied
Not yet recorded
Not yet scheduled
Not yet recorded
Not yet supplied
Not yet recorded
Assumed pending. Recorded as the blocker under every technical fix
Already held. Hassan confirmed 27 Aug that Shopify access is in place, so Section 2 and the same day fixes are executable now.
Assumed the Shopify account lacked the Themes permission, because Themes was missing from the Online Store menu and the themes page rendered blank.
RESOLVED 18 Sep, and the original diagnosis was wrong. The account has the Organization administrator role with full privileges, so Themes was always available. The themes page returns HTTP 200 but its embedded app iframe from online-store-web.shopifyapps.com silently fails to render in that browser, most likely third party cookie blocking. Worked around it with the Shopify CLI, which is the better tool anyway: the theme is pulled to disk, edited as real files with a reviewable diff, and pushed per file. Hassan also made an unpublished Latest Backup theme before any change.
Questions that only Assembly can answer were scattered across WhatsApp messages and call notes. Nothing recorded which had been answered, so the same question got asked twice and some were never answered at all.
BUILT AND LIVE 9 Oct at /questions on this tracker. 19 open questions, grouped into maker and attribution, products we cannot write about, duplicate listings and titles, photography, likely catalogue errors, and copy questions for Sara. Each question carries the reason it is being asked, the affected products listed out, a status of Open, Answered or Not applicable, and a reply box. Answers save as soon as the person clicks away and are stored against the question, so Sara, Mateen and Hassan all see the same board and the same replies. Whoever is answering picks their name once and every reply is attributed to them. The front page of the tracker shows how many are still open. The questions were built from a fresh read of the live catalogue on 9 Oct rather than from earlier notes, so the figures are current: 325 of 1,246 product images are PNG across 179 products with 88 still named 'Screenshot', six products are titled only 'LC1' at three different prices, and three pairs share both a title and a price so nothing in the data tells them apart. The page is not indexed and carries no login, so the link is the key. It should be shared with Sara and Mateen directly, not posted anywhere public.
This is not really a social section. Clarity shows 72% of all site traffic arrives through the Instagram and Facebook in-app browsers, so where posts land decides how the whole site performs. Instagram reached 246,423 people and sent 7,511 clicks last period, and those clicks arrive on collection pages with no H1 and no meta description. The 21.6% quick back click rate in the June report is the visible symptom. No new pages are needed here, only pointing the traffic at the pages already specified.
No mapping exists
Done 27 Aug. Extended 18 Sep: four keyword-DM ads written around the Murano sconces and the Lafer chair, with the full chat sequence, all pointing at the new collection pages.
Posts link to the generic store. The Murano collection is titled 'Lighting', has no H1 and no meta description, and is not linked from the homepage at all
Destination specified in the Murano build pack. Routing decided.
No designer page exists, so a post naming Mazzega, Platner or Cassina has nowhere to send anyone
Five designer pages specified in Section 5. Routing decided.
A single link and no link in bio service in use. Every post, whatever its subject, sends people to the same place
The destination now exists at /pages/shop. Replace the Linktree link in the Instagram bio with https://assemblyvintage.com/pages/shop and the routing is live.
Does not exist. All Instagram traffic funnels through one undifferentiated link
PUBLISHED AND LIVE 14 Oct at /pages/shop, with 17 internal links and nothing else on it. This is the Instagram link in bio destination. 72 percent of traffic arrives from Instagram, and it was landing on pages with no routing. Every category, every rug region, both guides and the two new positioning pages are one tap away, and the session and the analytics stay on assemblyvintage.com rather than going to Linktree.
21.6% of sessions are quick back clicks, flagged in June as ad to landing page mismatch. Nothing has been done about it since
Adopted as the success measure for this section. It is visible in Clarity immediately and does not require waiting for rankings.
No DM capture existed. Every post sent people to the same undifferentiated link
Four ad variants written with real product data and prices pulled from the live catalogue, plus greeting, completion and follow-up messages. Ready to load into the automation.
Baseline frozen 27 Aug for 3 Jun to 2 Sep 2026: 630 clicks, 8,300 impressions, 7.6% CTR, average position 11.6. Two findings shape the whole engagement. 44% of clicks are people searching for Assembly by name, so almost nothing is being won on commercial terms. And the collection pages already draw 2,542 impressions while converting at 2.4% against a 7.6% site average, which is the missing titles and descriptions costing clicks that Google is already offering.
Not yet verified for SEO reporting. Assumed no property existed
Access confirmed 27 Aug. A URL-prefix property for https://assemblyvintage.com/ already existed and HAS HISTORY, so there is a genuine baseline rather than a zero start.
No organic baseline recorded
FROZEN 27 Aug for 3 Jun to 2 Sep 2026: 630 clicks, 8,300 impressions, 7.6% average CTR, average position 11.6, across 451 queries and 313 pages.
The 27 Aug baseline, frozen for 3 Jun to 2 Sep: 630 clicks, 8,300 impressions, 7.6% CTR, average position 11.6. The comparison used here is the last 28 days against the 28 before it, pulled live on 26 Sep.
Clicks 137 to 450, up 228 percent. Impressions 1,690 to 8,410, up 398 percent. Average position 11.9 to 8.1, a gain of 3.8 places, which is the move from page two to the foot of page one and the single most meaningful number here. Three months now reads 942 clicks and 14.4K impressions. The daily chart steps up around 1 September, which is when the collection work went live. CAVEAT, and it must travel with the headline figure: a large share of the click growth is BRAND, not SEO. The homepage took 328 of the 450 clicks, up from 103, and the top queries are 'assembly vintage' 116 clicks up from 49, 'assembly vintage dubai' 37 up from 15, 'assembly' 15 clicks from 477 impressions up from zero, and 'assembly vintage store' 12 up from zero. Meta ads began on 10 September, and someone who sees an ad then searches the brand lands on the homepage and is counted as organic. Paid and organic cannot be cleanly separated in this report, so +228 percent should never be presented to Assembly as pure SEO. What IS clearly the SEO work is the collection pages, every one of which had no heading, no body copy and no meta description in August. Impressions before and after: seating 99 to 391, tapestry 42 to 340, lightning 21 to 319, murano-lighting 169 to 296, collections/all 252 to 493. Clicks on those remain 5 to 25 each, which is the expected shape, visibility arrives first and clicks follow as positions keep improving. CTR fell 8.1 to 5.3 percent. That is dilution from impressions quintupling rather than a fault, but it does set the next phase: earning the click rather than earning the ranking. The catalogue data work finished this week, 55 product descriptions and product_type on all 361, is NOT yet reflected here. Expect it to show over the next three to four weeks.
On 23 Sep the query 'pk11' showed 2,892 impressions at position 8.3 and a 0.1 percent click through rate. The product page itself was at 76 impressions in the previous 28 day window.
As of 26 Sep the PK11 product page carries 3,326 impressions against 76 in the previous period, a gain of 3,250, on 4 clicks. That is a 0.12 percent click through rate, and this ONE product now draws more impressions than every collection page on the site combined. The title tag and meta description were rewritten on 23 Sep so they have had three days, too early to judge. The body copy still cannot be fixed until Mateen confirms the maker, because the listing says 1957 for Fritz Hansen while the piece is tagged 1950s and Fritz Hansen only took on the Kjaerholm catalogue in 1982. RESOLVED 8 Oct. Assembly confirmed the provenance: designed by Poul Kjaerholm in 1957 and originally produced by E. Kold Christensen, NOT Fritz Hansen, who only took over the Kjaerholm collection in 1982. Period stays 1950s. Assembly updated the product description themselves and it now reads correctly. With the facts confirmed, three changes made on the product: the Year of Production metafield was EMPTY and is now 1957; the page title went from 'Poul Kjaerholm PK11 Armchair Dubai' to 'Poul Kjaerholm PK11 Armchair 1957, Dubai'; and the meta description, which had deliberately omitted the maker and year while the question was open, now reads 'Poul Kjaerholm PK11 armchair, 1957, original E. Kold Christensen production. Stainless steel, lacquered ash and leather. Dubai showroom.' Saved and confirmed by the admin. Why this is the click lever: the query 'pk11' was drawing roughly 3,300 impressions at about a 0.1 percent click through rate. Someone searching a model number wants to know the maker, the year and whether it is original. The snippet now answers all three, and 'original E. Kold Christensen production' is the authenticity signal a collector is looking for. The designer page at /pages/poul-kjaerholm was checked and never carried the wrong maker. It already said 'Kjaerholm's three legged design of 1957', which the confirmation validates. NOT YET VERIFIED ON THE LIVE STOREFRONT: assemblyvintage.com was unreachable from this machine at the time of the edit. Re-check the rendered title and meta when connectivity returns.
/collections/tapestry and /collections/lightning were renamed to /collections/vintage-persian-rugs and /collections/vintage-lighting on 18 Sep, with 301s verified at the time.
At 26 Sep the OLD URLs are still the ones accumulating impressions, tapestry at 340 and lightning at 319, while the new handles barely register. The redirects work and this is normal three weeks in, Google moves authority slowly. Recheck in late October. If the old URLs are still ahead then, investigate rather than wait.
Not set up
Top queries captured. 275 of 630 clicks, 44%, come from brand searches for Assembly itself. The best commercial term, 'vintage furniture dubai', draws 251 impressions but only 10 clicks at 4.0% CTR. UPDATED 26 Sep, last 28 days against the previous 28. Brand has gone from 44 percent of clicks to dominating outright: 'assembly vintage' 116 clicks up from 49, 'assembly vintage dubai' 37 up from 15, 'assembly' 15 clicks from 477 impressions up from zero, 'assembly vintage store' 12 up from zero. Meta ads started 10 September and are the likely cause, so brand movement is no longer a clean read on SEO. The commercial terms are the ones to watch from here.
Not set up
Captured. The homepage takes 484 of 630 clicks, 77% of all organic traffic. The four collection pages draw 2,542 impressions between them and convert at 2.4% against a 7.6% site average. UPDATED 26 Sep. Homepage concentration is essentially unchanged, 328 of 450 clicks or 73 percent against 77 percent at baseline, so the site still lives or dies on one page. The collection pages are however finally moving on impressions: seating 99 to 391, tapestry 42 to 340, lightning 21 to 319, murano-lighting 169 to 296, collections/all 252 to 493. Product pages now appear for the first time, PK11 at 3,326 impressions, wassily-chair-black at 39 with 6 clicks, serap-taskiran-1 at 13 with 3 clicks.
Nothing measured this at all. Assembly has no GA4 and no event tracking, so the only enquiry data was whatever arrived in the WhatsApp inbox with no source attached.
SHIPPED 14 Oct. The reason this had never been answered is that Assembly has no GA4, so there was no event layer at all. Clarity is installed and can already segment sessions by traffic source on its own; what it could not see was the enquiry itself. snippets/enquiry-tracking.liquid now fires a Clarity custom event and tag on every click of a WhatsApp link (wa.me/971543404142), an email link (info@assemblyvintage.com) or a phone link. Three events: enquiry_whatsapp, enquiry_email, enquiry_phone. Rendered from theme.liquid on every page and verified live. It is written defensively. Clarity loads through a Shopify app and may not be present on a given page, so every call is wrapped and the click is never blocked. HOW TO READ IT: in Clarity, filter sessions by the enquiry_whatsapp event and cross with channel to get enquiries from organic search. Data starts accumulating from 14 Oct, so the first useful reading is about four weeks out.
Impossible today. Assembly closes sales offline and no showroom feedback loop exists
Not yet recorded
Due by 5 October 2026
Not yet recorded
351 indexed against 60 not indexed, reasons not yet reviewed
Reasons pulled: 51 crawled but not indexed, 7 not found (404), 1 server error, 1 alternate page with canonical. Separately, 1 page is indexed despite being blocked by robots.txt. The 51 align with the 88 products carrying under 120 characters of description.
Web search clicks roughly double from early July and hold. Cause not yet confirmed
Not yet recorded
Search Console reported 7 URLs returning 404 in the 27 Aug baseline. The exact URLs were never captured.
DONE 18 Sep, pulled from Search Console on hassan.shahbaz8150@gmail.com. The count had risen to 13, and they split into three groups. SEVEN were deleted artworks (Serenity V, VI and VIII, Being Born, and three Serap Taskiran works); four of those were crawled in September so they were recent deletions still carrying value. All seven were 301'd to /collections/artwork via CSV import and verified live. THREE were .m3u8 video manifests under /upload/, which are media files that should never have been crawled, not pages. THREE were Shopify infrastructure paths (/wpm, /b, /v1/produce) that were never pages and can be ignored; Google drops these on its own.
1 page is indexed despite being disallowed, so Google is serving it without being able to read it
RESOLVED. Checked in Search Console on 14 Oct: 'Indexed, though blocked by robots.txt' is now 0 pages. It cleared itself, no change was needed. While checking, the wider indexing picture: 405 pages indexed, up from 372 on 14 Sep and 351 at baseline. 82 not indexed. The one number moving the wrong way is 'Crawled, currently not indexed', back up to 47 from 28 in September, which is worth watching.
Found 18 Sep. Three HLS video manifest files under /upload/ are being crawled and logged as 404s, one as recently as 15 Sep.
DEFERRED 18 Sep, on purpose. The theme has no robots.txt.liquid, so Shopify serves its default, which now includes a block of agentic commerce instructions for AI shopping assistants. Adding a custom robots template would replace that default wholesale and risk dropping those instructions, to stop three dead .m3u8 URLs appearing in a report. Not worth it. Those URLs already 404 and Google drops 404s on its own. Revisit only if the count grows.
Three kinds of competitor, only one worth fighting. The direct vintage rivals are not doing SEO at all: The Odd Piece, the closest match in positioning, has no H1, no structured data and 154 words on its homepage. The modern furniture retailers are properly built and will keep taking generic Dubai searches. The global marketplaces dominate product terms. Assembly's opening is the intersection none of them serve: period originals, named makers and techniques, and a showroom that can be visited this week.
No competitor set defined
Set defined and split into three tiers: direct vintage rivals (The Odd Piece, Garderobe), modern furniture retailers (ebarza, WS Living, The Wood of Arts) and global marketplaces (1stDibs, Nazmiyal, Nejad, originalmuranoglass.com).
No baseline
Structural baseline complete: title, meta, H1, schema, homepage word count and blog status measured on every competitor site. Ranking positions still need a UAE located check.
Not tracked
SET UP 14 Oct. The baseline existed but nothing re-measured it, and the competitor URLs had never been written down, so the first job was finding them again: the-oddpiece.com, wsliving.ae, ebarza.com and theantiquesfurniture.com, which trades as The Wood of Arts. tracker/trackcompetitors.py now measures all five sites, Assembly included, on the same basis as the August baseline: title length, meta description length, H1 presence, schema types, homepage word count and whether a blog exists. It writes a dated snapshot into competitors.json and /competitors renders the latest one against August, so movement shows without reading two pages. One command, monthly. FIRST RE-MEASUREMENT, 14 Oct against August. Assembly has moved on every structural measure: title 30 to 87 characters, meta 299 to 154, H1 empty to written, homepage 313 to 550 words, schema from Organization only to FurnitureStore with opening hours and a real address, which no competitor except The Wood of Arts matches. The competitors have barely moved. The Odd Piece is still on 201 words with no H1 and no structured data of any kind. ebarza has gone backwards, 8,374 words to 6,625. The Wood of Arts has crept up to 9,854. WHAT HAS NOT CHANGED ON OUR SIDE: Assembly still has no blog, and still has the fewest homepage words in the set.
Not yet analysed
Six gaps identified and ordered. Every retail competitor runs FurnitureStore or equivalent schema plus BreadcrumbList; Assembly runs Organization only. Two run FAQPage. All three publish; Assembly has zero articles. Assembly's homepage carries 313 words against 8,374 and 9,492.
No position data exists for any core search
SET UP 14 Oct and live at /ranks on this tracker. The ten terms were chosen from live Search Console data rather than guessed at, so every one is a search Assembly already appears on and can be measured against month to month. Positions are Google's own average position, which is the honest measure available without a paid tool: it reflects every search where the site appeared rather than one simulated check from one location. Where we stand over the last three months: vintage furniture dubai 5.1, vintage concept store 6.6, vintage furniture uae 7.8, murano lighting dubai 8.4, vintage store dubai 8.4, antique furniture dubai 10.3, antique brass floor lamps dubai 14.3, vintage table lamps 25.1, murano wall sconces 26.7, murano glass wall sconce 29.8. Two findings came straight out of it. First, several page one terms earn no clicks at all, which is a snippet problem rather than a ranking problem. Second, Assembly holds 41 Murano wall sconces and has a collection page for them, yet sits between position 26 and 39 on every sconce search. That is the clearest single gap on the site. WHAT TO WATCH NEXT. Two of the ten terms, 'murano wall sconces' at 26.7 and 'murano glass wall sconce' at 29.8, are the direct target of the sconce rebuild done on 14 Oct. If 41 unique product pages are the right diagnosis, those two should move first and furthest. Recheck in late November, since Google takes weeks to re-crawl and reassess a cluster that size.
Realistic on designer and long tail terms. Head terms such as 'vintage furniture Dubai' are unlikely inside six months from this base
Blocked on provenance and photography input
Four are upgrades, seven are new builds
Capture the baseline before any changes ship, or the increase cannot be proven