Troubleshooting a schema issue with reference fields in Slack thread

32 replies
Last updated: Sep 8, 2021
⚠️ Sanity Team, I'm in a really weird spot where my reference fields are failing with the following error message:
Reference search failed
Attribute name cannot be an empty string
Upon inspection, it looks like I'm running into a schema issue or something. This error only seems to appear with specific doc types. I've narrowed it down to specific doc types, but I can't tell where the error is stemming from.

It looks like my studio query is setting an attribute name to
@[""]
which can be seen in this XHR request in Chrome developer tools:
<https://x6q9abew.api.sanity.io/v2021-03-25/data/query/development?query=*[_type> in $__types&&!(_id in path('drafts.**'))][0...$__limit]{_type == "pageArchive" => { "w0": _id,"w1": _type,"w2": title,"w3": @[""],"w4": slug.current,"w5": message,"w6": seo.seoTitle,"w7": seo.seoDescription },}&$__types=["pageArchive"]&$__limit=1000&tag=sanity.studio.search.reference
Note:
"w3": @[""]

Of course, this is coming at a time when we're trying to launch a site.

Anyone able to shed some light on this?
AI Update

This is a classic preview configuration issue in Sanity! The error "Attribute name cannot be an empty string" with @[""] in your GROQ query happens when your schema has a preview select configuration that's trying to access a field with an empty string as the key name.

Looking at your XHR request, the generated query shows "w3": @[""], which means Sanity is trying to select a field with an empty name. This is almost always caused by a misconfigured preview.select in your schema definition.

Here's what's likely happening:

In your pageArchive document type (or one of the types it references), you probably have something like this in your preview configuration:

preview: {
  select: {
    title: 'title',
    subtitle: 'slug.current',
    '': 'someField',  // ← This empty string key is the problem!
    // or
    media: ''  // ← Or an empty string value
  }
}

How to fix it:

  1. Find the problematic schema: Since you've narrowed it down to specific doc types, search your schema files for the pageArchive type and any types it references

  2. Check the preview configuration: Look for any preview.select objects that have:

    • Empty string keys: '': 'fieldName'
    • Empty string values: fieldName: ''
    • Undefined or null field paths
  3. Common culprits based on the preview configuration documentation:

    // BAD - empty key
    preview: {
      select: {
        title: 'title',
        '': 'description'  // Remove this!
      }
    }
    
    // BAD - empty value
    preview: {
      select: {
        title: 'title',
        media: ''  // Should be a valid field path or removed
      }
    }
    
    // GOOD
    preview: {
      select: {
        title: 'title',
        subtitle: 'description',
        media: 'image'
      }
    }
  4. Check conditional logic: If you're using prepare functions with conditional logic, make sure you're not accidentally creating empty keys:

    // This could cause issues if someCondition evaluates to empty string
    select: {
      [someCondition ? 'title' : '']: 'fieldName'  // Don't do this!
    }

Quick debugging tip: Search your schema files for patterns like:

  • '': (empty string followed by colon)
  • : '' (colon followed by empty string)
  • preview: { (then inspect each preview config)

Once you remove or fix the empty string attribute name in your preview configuration, restart your Studio and the reference search should work properly. Since you're in a launch situation, this should be a quick fix once you locate the offending schema definition!

What's the fastest way for me to check that?
user M
☝️
sanity versions
@sanity/cli                  2.1.4 (latest: 2.18.0)
@sanity/base                2.17.0 (latest: 2.18.0)
@sanity/cli                 2.17.0 (latest: 2.18.0)
@sanity/components          2.14.0 (up to date)
@sanity/core                2.17.0 (latest: 2.18.0)
@sanity/dashboard           2.17.0 (latest: 2.18.0)
@sanity/default-layout      2.17.0 (latest: 2.18.0)
@sanity/default-login       2.17.0 (latest: 2.18.0)
@sanity/desk-tool           2.17.0 (latest: 2.18.0)
@sanity/production-preview  2.15.0 (up to date)
@sanity/uuid                 3.0.1 (up to date)
@sanity/vision              2.15.0 (latest: 2.17.2)
user M
Should I be upgrading?
user M
Should I be upgrading?
Yep! Give it a shot! Also, you say you've narrowed down the particular doc types. Can you share the relevant code so I can try to replicate if upgrading doesn't work?
Yeah sure
Let me give upgrading a shot
user M
Looks like upgrading didn't help. This is my schema JSON for the doc above:
{
    "name": "pageArchive",
    "title": "Archive Page",
    "type": "document",
    "__experimental_actions": ["update", "publish"],
    "fieldsets": [
        {
            "name": "seo",
            "title": "SEO",
            "options": {
                "collapsible": true,
                "collapsed": true
            }
        },
        {
            "name": "meta",
            "title": "Meta",
            "options": {
                "collapsible": true,
                "collapsed": true
            }
        }
    ],
    "fields": [
        {
            "name": "title",
            "title": "Title",
            "validation": null,
            "type": "string"
        },
        {
            "name": "slug",
            "title": "Slug",
            "description": "Leave blank to autofill.",
            "options": {
                "source": "title",
                "maxLength": 96,
                "minLength": 4
            },
            "readOnly": true,
            "type": "slug",
            "fieldset": "meta"
        },
        {
            "name": "message",
            "title": "Message",
            "validation": null,
            "message": "This page is populated with Posts",
            "inputComponent": {
                "propTypes": {}
            },
            "type": "string"
        },
        {
            "name": "seo",
            "title": " ",
            "validation": null,
            "fieldset": "seo",
            "type": "seo"
        }
    ],
    "preview": {
        "select": {
            "title": "title",
            "media": "image",
            "subtitle": ""
        }
    }
}
The inputComponent for
message
is a component called
AdminMessage
that just displays a message in the admin.
What else can I provide that will be helpful?
Which field contains the failing reference? Sorry I'm not seeing it.
Oh sorry, that's the doc that is being referenced. Here's the doc that is throwing that error:
Well, it's actually just a reference field that references
pageArchive
.
Off the top of my head,
title
under
seo
is
" "
. Also, does it help to remove
subtitle
from your
select
, since it's set to
""
?
Holy crap.
Wow.
Holy crap.
SEO title was fine
But the
subtitle = ""
was breaking it.
WOW
I feel like an idiot.
Hahaha
There are no idiots here, haha!
Thanks for your help!
Happy to help!
We've built a tool that helps build out schema faster...
And... apparently that's one of the things that it also does.
Breaks studio ahaha.
Welp. Thank you soooo much.
Very glad we got it working again!
🙌 🙏

Sanity – Build the way you think, not the way your CMS thinks

Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.

Was this answer helpful?