SEO Execution TrackerSeptember 2026 to February 2027

Assembly Vintage
Concept Store

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

111 of 136 tasks complete82%

Baseline  ·  measured 27 August 2026

Every figure below was read from the live site before any change was made. This is what the six month result gets measured against.

358
Products live
in the sitemap
7
Collection pages
against 11 planned
0
Designer pages
against 10 planned
1
Murano pages
against 8 planned
86
Murano products
one page serving them
0
Collection H1s
none of the 7 have one
0
Collection meta descriptions
none of the 7 have one
19/22
Homepage images with no alt
measured on the live page

Scope

What this tracker covers In scope: sections 2, 3, 4, 5, 7, 9, 11, 12, 13 of the plan.

Not in scope: 1 Google Business Profile, 6 Sold products online, 8 Editorial articles, 10 PR and backlinks.

Section 2  ·  Website SEO audit

39 of 41 complete

Full technical audit of assemblyvintage.com during September. The audit itself is complete, the fixes are what remains.

Done27 Aug
Technical crawl and baseline capture
Before

No baseline existed

After

358 products, 7 collections, 7 pages, 0 articles mapped. Full catalogue pulled and all 96 Murano products classified by type.

Done27 Aug
Page titles
Before

Bare category words. /collections/murano-lighting titled 'Lighting', /collections/lightning titled 'Lamps'. No location or category terms anywhere

After

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.

Done1 Oct
Meta descriptions
Before

Zero on all 7 collection pages. Product pages inconsistent, one at 323 chars, another empty

After

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.

Done18 Sep
H1 / H2 structure
Before

No H1 on any collection page. Homepage H1 exists but is empty

After

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.

Done27 Aug
Image ALT text
Before

19 of 22 homepage images have no alt attribute at all

After

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.

Done27 Aug
Image file sizes
Before

Not yet measured

After

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.

Done18 Sep
Broken links and 404s
Before

Not yet crawled

After

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.

In progress27 Aug
Redirects
Before

No redirect map exists

After

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.

Done27 Aug
Duplicate content
Before

/pages/lighting and /collections/murano-lighting both titled 'Lighting'

After

Confirmed. Also found 88 of 357 products carry under 120 characters of description, which is thin-content risk across a quarter of the catalogue.

Done26 Sep37 products still blocked on Assembly
Thin product descriptions
Before

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.

After

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.

Done14 Oct
Mobile performance
Before

Not yet measured

After

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.

Done14 Oct
Site speed and Core Web Vitals
Before

Homepage 191 KB of HTML with 80 script tags. Field data not yet pulled

After

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.

Done14 Oct
Search Console indexing issues
Before

Not yet reviewed

After

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.

Done27 Aug
XML sitemap
Before

Present and valid. Blog sitemap contains the blog index and no articles

After

Not yet recorded

Done27 Aug
Product structured data
Before

Product schema present on product pages

After

Not yet recorded

Done18 Sep
Organisation and LocalBusiness schema
Before

Organization present. No LocalBusiness anywhere, so the Al Quoz showroom is invisible to local search

After

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.

Done18 Sep
Breadcrumb schema
Before

No BreadcrumbList on any template

After

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.

Done27 Aug
Canonical URLs
Before

Correct and self referencing on every page checked

After

Not yet recorded

Done6 Oct
Internal linking
Before

No links from products back to collections or designers

After

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.

Done18 SepDo not change without a 301 plan
Fix the /collections/lightning misspelling
Before

The lighting collection sits on a URL spelt 'lightning'. Needs a redirect strategy, not a rename

After

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.

Done12 OctTitle-identifiable makers done, the rest needs Mateen
Vendor field carries the shop name, not the maker
Before

All 357 products have vendor set to 'Assembly Vintage Concept Store' or 'assembly-vintage'. Not one carries its actual designer or manufacturer

After

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.

Done27 AugProcess note
Shopify Save can fail silently
Before

Not known

After

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.

Done18 Sep
Navigation / URL redirects permission
Before

Assumed missing alongside Themes

After

CONFIRMED AVAILABLE 18 Sep. Online Store > URL redirects opens and already holds one redirect. The Section 4 renames are therefore possible.

Done8 Oct
Albaster misspelling in 6 product titles
Before

Found 18 Sep. Six Murano titles spell it Albaster instead of alabaster, while 10 other titles spell it correctly.

After

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.

Done18 Sep
Theme does not render collection descriptions
Before

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.

After

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.

Done18 Sep
Broken email link in the footer
Before

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.

After

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.

Done18 Sep
Duplicate lighting entries in the main menu
Before

Noticed 18 Sep. The main navigation shows both 'Lamps' and 'Lighting' as separate items.

After

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'.

Done18 SepMy own error, corrected
Art collection was described as vintage when it is contemporary
Before

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.

After

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.

Done18 Sep
Remaining collection H1s are single bare words
Before

Surfaced 18 Sep after the H1 fix went live. Collection titles were never meant to be seen as headings, so most are one word.

After

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.

Done8 Oct
PK11 chair: 2,892 impressions, 2 clicks
Before

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.

After

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.

Done23 Sep
Mobile rendering of both trackers and the report
Before

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.

After

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.

Done26 Sep
Automated collections are built on words in titles, which is fragile
Before

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.

After

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.

Done12 OctAssembly data fix, one product
A painting is tagged as a carpet
Before

'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.

After

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.

In progress14 OctNeeds Assembly to say what differs
Six products are titled 'LC1', and three pairs are true duplicates
Before

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.

After

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.

Done2 OctReported by Assembly's team in Italy
Desktop page speed: images were loading twice and nothing was lazy loaded
Before

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.

After

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.

Done8 OctNot a site fault, no action needed on the store
Storefront unreachable on PTCL, fine on other networks
Before

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.

After

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.

Done12 Oct
Product categories were wrong on every piece of art
Before

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.

After

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.

Done12 Oct
Photo re-export list delivered to Sara
Before

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.

After

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.

Done14 Oct
Two new lighting sub-collections, built on what the stock supports
Before

The plan called for Murano Table Lamps and Murano Floor Lamps. Neither was ever checked against the catalogue.

After

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.

Done24 Oct
Storefront search was returning near random results
Before

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.

After

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.

Done24 Oct
MVS Chaise Lounge Chair was classified as a Daybed
Before

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.

After

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.

Section 3  ·  Homepage SEO

12 of 13 complete

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.

Done27 AugNeeds Hassan, 60 seconds
Homepage title tag
Before

'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

After

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.

Done27 AugNeeds Hassan, 60 seconds
Homepage meta description
Before

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

After

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.

Done8 Oct
Homepage H1
Before

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

After

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.

Done27 Aug
Homepage image alt text
Before

19 of 22 images have no alt attribute

After

Confirmed against the live page and cross-checked with the catalogue, where the alt field is unset on all 1,246 product images.

Blocked19 Oct
Positioning copy on page
Before

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

After

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.

Done14 Oct
Internal links to priority categories
Before

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

After

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.

Done6 OctNeeds opening hours and coordinates from Assembly
Replace Organization schema with FurnitureStore
Before

Organization only, and its sameAs array holds seven empty strings alongside the two real profiles. No address, no phone, no hours

After

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.

Done23 Sep
Publish showroom opening hours
Before

Not published anywhere on the site. A buyer cannot tell when they can visit a warehouse address

After

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.

Done14 OctFile delivered, Hassan to upload
Social sharing image (og:image)
Before

og:image and twitter:image were both MISSING, so any link shared to WhatsApp, Instagram or Slack rendered with no preview image

After

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.

Done1 Oct
Rug sub-collections: Tabriz, Kerman, Anatolian
Before

Never considered. Found 18 Sep in the title scan, after the rugs URL rename.

After

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.

Done18 Sep
Body copy on collection pages
Before

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.

After

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.

Done23 Sep
Collection copy revised to Sara's brief
Before

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.

After

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.

Done14 Oct
The homepage carries two H1 headings
Before

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.

After

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.

Section 4  ·  Category landing pages

12 of 14 complete

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.

Done14 Oct
Vintage Furniture Dubai
Before

Does not exist. 138 products would populate it

After

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.

Done27 Aug
Vintage Seating
Before

/collections/seating holds 119 products, the largest collection on the site. No H1, no meta description, titled 'Seating'

After

SHIPPED 27 Aug. Title and meta description live, URL unchanged.

Done18 SepMisspelt URL
Vintage Lighting
Before

/collections/lightning, misspelt URL, 37 products. The other 92 lighting pieces sit under Murano and are disconnected from it

After

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.

Done27 AugImmediate queue
Murano Lighting
Before

/collections/murano-lighting, 92 products, titled 'Lighting', no H1

After

SHIPPED 27 Aug. Title and meta description live on /collections/murano-lighting.

Done27 Aug
Murano Chandeliers
Before

Does not exist. 47 products confirmed

After

SHIPPED 27 Aug. Live at /collections/murano-chandeliers with 52 products.

Done18 Sep
Italian Vintage Furniture
Before

Did not exist. The largest coherent theme in the catalogue

After

SHIPPED 18 Sep. Live at /collections/italian-vintage-furniture with 114 products, built on Murano OR Cassina OR Italian.

Done14 OctTag products first, then build
Mid-Century Modern
Before

Does not exist. 36 products match on description but no product title uses the phrase

After

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.

Done14 OctToo thin, recommend deferring
Scandinavian Design
Before

Does not exist. Only 15 products, 3 in titles

After

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.

Done18 SepHighest value fix in Section 4
Vintage Rugs
Before

Exists as /collections/tapestry holding 65 Persian rugs. 63 titles say Carpet, 51 say Persian, none say rug or tapestry

After

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.

Done14 Oct
Collectible Design
Before

Does not exist. The phrase appears nowhere on the site despite being one of the ten core searches

After

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.

In progress27 Aug
Art & Objects
Before

Split across /collections/artwork (28) and /collections/decorative-objects (8)

After

SHIPPED 27 Aug. Both collections given distinct titles and descriptions. The merge into one page is still pending.

In progress18 SepMust be added before any handle is edited
Redirect map for the four renames
Before

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.

After

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.

Done14 Oct
/collections/tables is too thin to rank
Before

8 products. Recommend folding into Vintage Furniture Dubai until stock grows

After

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.

Done14 OctLive; collection links pending a theme push
A Buyer's Guide to Vintage Persian and Anatolian Rugs
Before

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.

After

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.

Section 5  ·  Designer pages

15 of 15 complete

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.

Done18 SepDropped, inventory too thin
Mario Bellini
Before

Only 1 product carries Bellini in the title. Not viable as a page

After

Dropped. One product cannot sustain a collection page.

Done18 Sep
Cassina
Before

16 products reference Cassina, 8 in the title

After

SHIPPED 18 Sep. Live at /collections/cassina with 8 products, mostly LC4 chaise longues.

Done18 SepToo thin to rank, defer
Charles & Ray Eames
Before

Only 2 products reference Eames

After

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.

Done18 Sep
Knoll
Before

15 products reference Knoll, 10 in the title

After

SHIPPED 18 Sep. Live at /collections/knoll with 10 products. Wassily, Platner, Womb and Florence Knoll.

Done18 SepToo thin to rank, defer
Gae Aulenti
Before

Only 2 products, none in a title

After

CHECKED AND DROPPED 18 Sep. Gae Aulenti: 0 products in the title, 2 mentions buried in descriptions. Not buildable.

Done18 SepThin, defer
Poltronova
Before

3 products

After

CHECKED AND DROPPED 18 Sep. Poltronova: 3 real products (one is Marco Zanuso for Poltronova). Safari Armchair is Arkana, not Poltronova. Not enough.

Done18 SepNo inventory, recommend dropping
De Sede
Before

ZERO products in the catalogue

After

CHECKED AND DROPPED 18 Sep. De Sede: 0 matches anywhere, including DS model numbers. Nothing to build.

Done18 SepNo inventory, recommend dropping
Vico Magistretti
Before

ZERO products in the catalogue

After

CHECKED AND DROPPED 18 Sep. Vico Magistretti: 0 matches anywhere, including Atollo, Eclisse, Maralunga and Selene. Nothing to build.

Done18 Sep
Le Corbusier / Jeanneret / Perriand
Before

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

After

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.

Done18 SepToo thin to rank, defer
Afra & Tobia Scarpa
Before

Only 1 product

After

CHECKED AND DROPPED 18 Sep. Afra & Tobia Scarpa: 1 product (Soriana Cassina). Not enough for a page.

Done27 AugAdded, deepest maker on the site
Mazzega (built in the Murano work)
Before

Did not exist. 18 pieces in the catalogue, the deepest single maker on the site

After

SHIPPED 27 Aug. Live at /collections/mazzega-murano-lighting with 19 products. First designer page delivered, and the template for the other four.

Done12 OctTitle-identifiable makers done, the rest needs Mateen
Populate the vendor field with the real maker
Before

Every product says 'Assembly Vintage Concept Store'. Designer collections cannot be automated and Google receives the wrong brand

After

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.

Done18 SepMethod note
Designer pages are buildable from model numbers, not just names
Before

Assumed designer pages needed the designer name in the product title

After

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.

Done18 Sep
Marcel Breuer (Wassily and Cesca)
Before

Never considered. Found 18 Sep by scanning which brand words actually appear in product titles rather than guessing designer names.

After

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.

Done18 Sep
Mies van der Rohe (Barcelona)
Before

Never considered. Found 18 Sep in the same title scan.

After

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.

Section 7  ·  Murano SEO project

15 of 18 complete

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.

Done27 AugImmediate queue
Vintage Murano Lighting Dubai
Before

Nearest is /collections/murano-lighting, titled 'Lighting', no H1, no meta description

After

SHIPPED 27 Aug and verified live. Title and meta description in place on the existing hub.

Done27 Aug
Murano Chandeliers
Before

Does not exist. 47 products confirmed

After

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.

Blocked14 OctDeferred, inventory too thin
Murano Table Lamps
Before

Does not exist. Catalogue analysis found only 2 Murano table lamps

After

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.

Blocked14 OctRecommend dropping from the plan
Murano Floor Lamps
Before

Does not exist. Catalogue analysis found ZERO Murano floor lamps

After

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.

Done27 Aug
Murano Tube Chandeliers
Before

Does not exist. 19 products contain 'tube', but 6 of those are wall sconces

After

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.

Done1 Oct
Guide to Murano Glass
Before

Does not exist

After

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.

In progress27 Aug
How to Identify Vintage Murano Lighting
Before

Does not exist

After

Specified. Depends on Assembly supplying detail photography of labels and markings.

Done1 Oct
History of Murano Lighting
Before

Does not exist

After

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.

Done1 Oct
Internal linking: products to collections, hubs to sub-collections
Before

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.

After

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.

Done27 AugAdded to the plan
Murano Wall Sconces
Before

Does not exist. 35 products found in the catalogue, the second largest Murano segment and absent from the original plan

After

SHIPPED 27 Aug. Live at /collections/murano-wall-sconces, automated on 'Title contains sconce', 37 products. Title and meta set, verified live.

Done27 AugAdded to the plan
Mazzega maker page
Before

Does not exist. 18 Mazzega pieces in the catalogue

After

SHIPPED 27 Aug. Live at /collections/mazzega-murano-lighting, automated on 'Title contains Mazzega', 19 products. Doubles as the first Section 5 designer page.

Done27 AugSame day fix, executable now
Correct 'scones' to 'sconces' on 26 product titles
Before

26 products titled 'wall scones'. 18 need no URL change, 8 have 'scone' in the handle and need a 301

After

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.

Done26 Sep
Populate product_type across the catalogue
Before

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.

After

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.

Done23 Sep
Poul Kjaerholm designer page
Before

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.

After

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'.

Done14 Oct
The Murano wall sconce cluster: 41 product pages rebuilt
Before

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.

After

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.

Done14 Oct
Sub-collections were a dead end
Before

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.

After

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'.

Done14 Oct
Image alt text is missing across the catalogue
Before

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.

After

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.

Done14 Oct
The chandeliers have the same thin copy problem as the sconces
Before

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.

After

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.

Section 9  ·  Use Assembly's own expertise

3 of 8 complete

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.

BlockedNeeded from Assembly
Access to inventory and provenance records
Before

Not yet granted

After

Not yet recorded

BlockedNeeded from Assembly
Original photography of markings and labels
Before

Not yet supplied

After

Not yet recorded

BlockedNeeded from Assembly
Restoration examples and before/after images
Before

Not yet supplied

After

Not yet recorded

BlockedNeeded from Assembly
Time with the buying team for designer knowledge
Before

Not yet scheduled

After

Not yet recorded

BlockedNeeded from Assembly
Archive of sold pieces with photography
Before

Not yet supplied

After

Not yet recorded

Done27 Aug
Shopify theme and admin access
Before

Assumed pending. Recorded as the blocker under every technical fix

After

Already held. Hassan confirmed 27 Aug that Shopify access is in place, so Section 2 and the same day fixes are executable now.

Done18 SepWas never a permission problem
Themes permission on the Shopify account
Before

Assumed the Shopify account lacked the Themes permission, because Themes was missing from the Online Store menu and the themes page rendered blank.

After

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.

Done9 Oct
Open questions put to Assembly in one place, with a reply box against each
Before

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.

After

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.

Section 11  ·  Instagram to Google alignment

3 of 7 complete

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.

Done18 Sep
Map recurring Instagram subjects to site destinations
Before

No mapping exists

After

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.

In progress27 Aug
Murano posts point to the Murano hub
Before

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

After

Destination specified in the Murano build pack. Routing decided.

In progress27 Aug
Designer posts point to designer pages
Before

No designer page exists, so a post naming Mazzega, Platner or Cassina has nowhere to send anyone

After

Five designer pages specified in Section 5. Routing decided.

Done14 Oct
Link in bio routing to priority pages
Before

A single link and no link in bio service in use. Every post, whatever its subject, sends people to the same place

After

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.

Done14 Oct
Build the on-site routing page at /pages/shop
Before

Does not exist. All Instagram traffic funnels through one undifferentiated link

After

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.

In progress27 Aug
Use the quick back click rate as the landing page measure
Before

21.6% of sessions are quick back clicks, flagged in June as ad to landing page mismatch. Nothing has been done about it since

After

Adopted as the success measure for this section. It is visible in Clarity immediately and does not require waiting for rankings.

In progress18 SepNeeds a human covering the inbox
Keyword DM campaign written (ASSEMBLY)
Before

No DM capture existed. Every post sent people to the same undifferentiated link

After

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.

Section 12  ·  Search Console monthly report

8 of 15 complete

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.

Done27 AugVerify before wave one ships
Confirm Search Console access and property
Before

Not yet verified for SEO reporting. Assumed no property existed

After

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.

Done27 Aug
Capture organic baseline: impressions, clicks, position, CTR
Before

No organic baseline recorded

After

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.

Done26 SepRead the brand caveat before quoting these numbers
26 Sep performance snapshot: first measurable lift
Before

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.

After

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.

Done8 Oct
PK11 armchair is the largest single opportunity on the site
Before

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.

After

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.

Not started26 SepRecheck late October
Old collection URLs still collecting the impressions
Before

/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.

After

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.

In progress26 Sep
Top 20 keyword tracking with up, down and new markers
Before

Not set up

After

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.

In progress26 Sep
Top 10 organic landing page tracking
Before

Not set up

After

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.

Done14 Oct
WhatsApp and contact enquiries from organic
Before

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.

After

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.

BlockedNeeded from Assembly
Sales attributable to organic search
Before

Impossible today. Assembly closes sales offline and no showroom feedback loop exists

After

Not yet recorded

Not started
First monthly dashboard delivered
Before

Due by 5 October 2026

After

Not yet recorded

Done27 AugNew finding from the Search Console baseline
Investigate the 60 not indexed pages
Before

351 indexed against 60 not indexed, reasons not yet reviewed

After

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.

Not startedCheck the Search type filter, web against merchant listings
Confirm what drove the early July organic uplift
Before

Web search clicks roughly double from early July and hold. Cause not yet confirmed

After

Not yet recorded

Done18 Sep
Fix the pages returning 404
Before

Search Console reported 7 URLs returning 404 in the 27 Aug baseline. The exact URLs were never captured.

After

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.

Done14 OctFrom the 27 Aug baseline
Resolve the page indexed but blocked by robots.txt
Before

1 page is indexed despite being disallowed, so Google is serving it without being able to read it

After

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.

Not started18 SepDeliberately deferred, low value against the risk
Stop the .m3u8 video manifests being crawled
Before

Found 18 Sep. Three HLS video manifest files under /upload/ are being crawled and logged as 404s, one as recently as 15 Sep.

After

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.

Section 13  ·  Competitor monitoring

4 of 5 complete

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.

Done27 Aug
Identify the competitor set for Dubai vintage and design searches
Before

No competitor set defined

After

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).

In progress27 AugNeeds a Dubai rank tracker or UAE IP
Baseline their positions on the ten core searches
Before

No baseline

After

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.

Done14 OctSet up alongside the rank tracker
Track their content, backlinks and reviews monthly
Before

Not tracked

After

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.

Done27 Aug
Identify authority gaps Assembly can close
Before

Not yet analysed

After

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.

Done14 OctDo before any on-site change ships
Set up Dubai rank tracking on the ten core searches
Before

No position data exists for any core search

After

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.

Six month targets

Top 3 to 5 visibility on several core Dubai searches

Realistic on designer and long tail terms. Head terms such as 'vintage furniture Dubai' are unlikely inside six months from this base

No organic baseline captured yet
10 designer pages

Blocked on provenance and photography input

0 today
10 category and subject landing pages

Four are upgrades, seven are new builds

7 collections, none SEO ready
50 to 100% increase in qualified organic traffic

Capture the baseline before any changes ship, or the increase cannot be proven

Baseline not yet captured in Search Console