google / react-schemaorg

Type-checked Schema.org JSON-LD for React
Apache License 2.0
481 stars 19 forks source link

Script not showing up in page source #28

Open aLx450 opened 3 years ago

aLx450 commented 3 years ago

Hi,

I'm new to this, so maybe I'm missing something... I'm under the impression that the point of this library is to be able to insert JSON-LD in any functional component, and also be readable by Google Rich Results (that apparently will replace GDT).

I have inserted this sample in my functional component, displayed when I'm at localhost:3000/integrations (redirection handled via React Router. This is a single JSON-LD object, but eventually there will be a loop to create multiple ones with variables. The "name" property already has a variable as it's value, as you can see below.

return (
        <div>
            <JsonLd<Person>
                item={{
                    "@context": "https://schema.org",
                    "@type": "Person",
                    "address": {
                        "@type": "PostalAddress",
                        "addressLocality": "Colorado Springs",
                        "addressRegion": "CO",
                        "postalCode": "80840",
                        "streetAddress": "100 Main Street"
                    },
                    "colleague": [
                        "http://www.example.com/JohnColleague.html",
                        "http://www.example.com/JameColleague.html"
                    ],
                    "email": "info@example.com",
                    "image": "janedoe.jpg",
                    "jobTitle": "Research Assistant",
                    "name": name,
                    "alumniOf": "Dartmouth",
                    "birthPlace": "Philadelphia, PA",
                    "birthDate": "1979-10-12",
                    "height": "72 inches",
                    "gender": "female",
                    "memberOf": "Republican Party",
                    "nationality": "Albanian",
                    "telephone": "(123) 456-6789",
                    "url": "http://www.example.com",
                        "sameAs" : [ "https://www.facebook.com/",
                                    "https://www.linkedin.com/",
                                    "http://twitter.com/",
                                    "http://instagram.com/",
                                    "https://plus.google.com/"]
                }}
            />
        </div>
)

However, when I check the page source, I only get the contents of my index.tsx which is the standard React prebuilt code with the root div where the App component goes. My question is this: Where do the inserted scripts go when I use the JSONLd component? Because when I go run them in the validator, they are not found.

Thank you!

Eyas commented 3 years ago

Hey! Happy to help. You're right about the purpose of this library, by the way :)

How are you checking your page source? I'm confused that you're seeing the context of your "index.tsx" anywhere, so a few things:

It sounds to me like you're doing one of the above two steps and hoping to see a <script> tag? If so, that won't work. If you instead try to Inspect the element and navigate to your <div>, you should see a <script> under it. Are you saying that isn't happening?

Google documentation states that client-side rendered JSON-LD will typically be accepted.

aLx450 commented 3 years ago

Thanks for the quick reply Eyas. When I right click anywhere in my React App and click View Page Source, the source I'm shown is the content of index.tsx because, I assume, of the SPA nature of the framework. There is only one page to display.

What you mention is true, if I'm on the page where I render the JSON-LD, if I open the Dev Tools, select the Elements tab and scroll through the head tag, I see my script.

However, I was under the impression that adding this JSON-LD with the library would send the script tag to the head tag in index.tsx to make sure it was seen first. From what you're telling me, it does not.

But then, the issue comes up when I put the URL (xxx.ngrok.io:3000 redirecting to localhost:3000) in the Google Rich Results. The only page that is crawled in the index.tsx, the only page of the SPA, even if I use React-Router. There's a lot of info here, and I'm trying to narrow it down...

Any ideas...?

Eyas commented 3 years ago

Hmm there's a few things going on here: