SEOClerks

Hidden Content - Using CSS and Javascript



Write the reason you're deleting this FAQ

Hidden Content - Using CSS and Javascript

On of the biggest problems, I'm facing as an SEO expert inside an agency is getting stuff my way, the SEO way. When we first start working on a project I always get into some contradictory arguments with the designer over hidden text, later on, I have the same problems with the programmer. 

They always want to implement the fastest solution or the "trendiest" idea and this isn't always good for SEO. 
So when do we need to implement hidden text with CSS or Javascript and when do you need to keep everything in the open?
First of all, Google admitted that pages that contain hidden text, that can be seen with a "read more button or other CSS/Javascript configuration will always get slightly lower rankings compared with a full shown content on a page. 

  • Implement hidden text features ONLY when the benefits of having such a feature outweigh the actual SEO potential. In other words, if implementing such a feature can bring your more benefits, like conversion, design related optimizations or a better user experience you can go ahead and implement hidden text. 
  • When you have enough visible text that contains SEO ranking factors like keywords, subjects and enough content to beat the competition. 
More information regarding this subject you can find here. An extended SEO experiment made by rebootonline.com's Shai Aharony
The result and conclusion of the above experiment are pretty clear: Google prefers visible text over all other alternatives, including hiding text with CSS or Javascript. 

Comments

Please login or sign up to leave a comment

Join
idealmike
Yeah, this seems like a no brainer to me! And it's fair play that you stand up for what you know to be right when it comes to SEO for your clients and they should respect and appreciate that too! Because it can seem right from a coder or programmers perspective to do such a thing as that, but they, although very good at what they do, don't fully understand the implications of doing such a thing as hiding text.

And that's some serious experimentation and data crunching that Shai Aharony and is team have done there! Clearly showing what the advantages are to not hiding text when it comes to what Google sees when you do.

And this is something that might seem very small and trivial as though it doesn't matter much. But sometimes, even the smallest of things like this can have a dramatic affect on a website ranking when it comes to how Google looks at it.

I think you're right mate, you should only do this when there is absolute cause to, when you already have enough text on that page so that the hidden text isn't the only content that contains your keywords etc.

TBH, I'm surprised that Google still can't read it anymore anyway, even if it is hidden with a CSS read more tag. I would have thought that the Google spiders would be able to click on that to read it but apparently not. Huh.



Are you sure you want to delete this post?

overcast
As per google guidelines it can be unsafe to use the hidden content. You can still use the CSS method though. But hidden javascript method may not be good for you. And if you are thinking about using this method for more of hiding some links etc then that can be one issues.



Are you sure you want to delete this post?

Robbie626
Thank you for telling us the negative outcome from using this method. I know having hidden content would hurt SEO ranking with Google.



Are you sure you want to delete this post?

overcast
Text visibility for link building was an issue. And many people got penalty for same reason. I think that's another reason it'd be safe to say that google has their own way to handle this issue. I personally think that CSS method may or may not work. It's nothing new from me. I knew this long back just like many others who are into SEO.



Are you sure you want to delete this post?

Corzhens
I think you are exposed to some risk with a hidden content because I don’t think the search engines will go out of their way to do another click just to see the hidden content. If I were the search engine, I would even ignore the site itself when I find a hidden link in any of the pages. The hidden link is like an insult to the crawlers and it is only right to be ignored because it wanted to be hidden, right?



Are you sure you want to delete this post?

Order Now
Process Time: 0.085441112518311

Possible Duplicate queries found!
MatchCountSQLScript
SELECT * FROM `questions` as q JOIN categories_faq as c ON q.catid=c.CATID WHERE (q.status=1 OR (q.status=2 AND userid='') ) AND q.quesid='23015'1SELECT q.*, c.seo as CatSEO, c.name as CatName, c.parentid FROM `questions` as q JOIN categories_faq as c ON q.catid=c.CATID WHERE (q.status=1 OR (q.status=2 AND userid='') ) AND q.quesid='23015'

/opt/clerks-staging/docroot/viewfaq.php 496 () ()

SELECT * FROM seoclerks.members WHERE USERID='134'1SELECT * FROM seoclerks.members WHERE USERID='134'

/opt/clerks-staging/docroot/include/functions/includes/member.php 445 GetAllUserDetails() ()

SELECT * FROM categories_faq WHERE CATID='43'1SELECT CATID, seo, name, metatitle, h2header, metakeywords, metadescription, metaheader, parentid, image_name FROM categories_faq WHERE CATID='43'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() GetCategorySeoFromType()

SELECT * FROM seoclerks.members WHERE USERID=1341SELECT googleplus_profile FROM seoclerks.members WHERE USERID=134

/opt/clerks-staging/docroot/include/functions/main.php 16914 GetGooglePlusProfileFromId() ()

SELECT * FROM ratings_faq as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=23015 LIMIT 51SELECT m.username FROM ratings_faq as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=23015 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM answers a, seoclerks.members b WHERE a.quesid='23015' AND a.userid=b.USERID and b.status='1' AND a.status=1 ORDER BY a.combined_votes DESC, a.date_answered asc1SELECT a.answer, a.USERID, a.upvotes, a.downvotes, a.ansid, a.parentid, a.combined_votes, a.date_answered, b.username, b.userlevel, b.profilepicture FROM answers a, seoclerks.members b WHERE a.quesid='23015' AND a.userid=b.USERID and b.status='1' AND a.status=1 ORDER BY a.combined_votes DESC, a.date_answered asc

/opt/clerks-staging/docroot/viewfaq.php 1245 () ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=118970 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=118970 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=119573 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=119573 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=119720 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=119720 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=119781 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=119781 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

SELECT * FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=172324 LIMIT 51SELECT m.username FROM ratings_faqanswers as r, seoclerks.members as m WHERE r.USERID=m.USERID AND r.upvote=1 AND r.PID=172324 LIMIT 5

/opt/clerks-staging/docroot/include/functions/main.php 17159 GetVoters() ()

UPDATE questions SET total_views = total_views + 1 WHERE quesid='23015'1UPDATE questions SET total_views = total_views + 1 WHERE quesid='23015'

/opt/clerks-staging/docroot/include/functions/main.php 1765 update_Faqviewcount() ()

SELECT * FROM questions WHERE quesid!='23015' AND status='1' AND (question like '%Hidden Content - CSS Javascript %' OR question like '%Hidden%' OR question like '%Content%' OR question like '%Javascript%') -- ORDER BY RAND() LIMIT 151SELECT quesid, question, seo, userid FROM questions WHERE quesid!='23015' AND status='1' AND (question like '%Hidden Content - CSS Javascript %' OR question like '%Hidden%' OR question like '%Content%' OR question like '%Javascript%') -- ORDER BY RAND() LIMIT 15

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() ()

SELECT * FROM seoclerks.members WHERE USERID='9399' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='9399' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='1508' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='1508' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='17130' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='17130' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='1323' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='1323' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM seoclerks.members WHERE USERID='840' limit 11SELECT profilepicture FROM seoclerks.members WHERE USERID='840' limit 1

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_member_profilepicture()

SELECT * FROM members_ledger WHERE script='/opt/clerks-staging/docroot/viewfaq.php' AND querystring LIKE '%id=23015%' AND added>=UNIX_TIMESTAMP(NOW())-1200 GROUP BY USERID 1SELECT USERID, username FROM members_ledger WHERE script='/opt/clerks-staging/docroot/viewfaq.php' AND querystring LIKE '%id=23015%' AND added>=UNIX_TIMESTAMP(NOW())-1200 GROUP BY USERID

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() ()

SELECT * FROM categories1SELECT * FROM categories

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() parseRedundantQueriesCache()

select * from categories_software order by name asc1select * from categories_software order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_GetSoftwareCategories()

select * from categories_wanttobuy order by name asc1select * from categories_wanttobuy order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_wantcategories()

select * from categories_wanttotrade order by name asc1select * from categories_wanttotrade order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_get_tradecategories()

SELECT * FROM seoclerks.members WHERE USERID='272.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='272.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='589438.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='589438.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='596129.png'1SELECT profilepicture FROM seoclerks.members WHERE USERID='596129.png'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

SELECT * FROM seoclerks.members WHERE USERID='600657.jpg'1SELECT profilepicture FROM seoclerks.members WHERE USERID='600657.jpg'

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() getUserProfileImage()

select * from categories_faq order by name asc1select * from categories_faq order by name asc

/opt/clerks-staging/docroot/libraries/adodb5/adodb.inc.php 1899 CacheExecute() insert_GetFaqCategories()

Invalid SQL

count(*)sql1error_msg

Expensive SQL

Tuning the following SQL could reduce the server load substantially
LoadCountSQLMaxMin

Suspicious SQL

The following SQL have high average execution times
Avg TimeCountSQLMaxMin
0.4041751SELECT A.*, C.username, C.profilepicture, C.userlevel, C.ratingcount, C.rating, C.lastlogin, C.ip, C.lip, C.profile_data from posts A, seoclerks.members C WHERE A.active=1 AND A.USERID=C.USERID AND A.sold_out=0 AND category IN (37) AND gtags like'%wpeasycode%' AND type=7 AND type !=99 AND A.feat=0 AND A.catfeatured_upgrade=0 order by A.lastgigedit desc limit 0, 400.4041750.404175
0.1460181SELECT A.*, B.seo, B.name as categoryname, C.username, C.userlevel, C.lastlogin, C.ip, C.profilepicture FROM wanttobuy A, categories_wanttobuy B, seoclerks.members C WHERE A.active = 1 AND A.category = B.CATID AND A.USERID = C.USERID AND (A.tags LIKE '%Developing%' OR A.skills LIKE '%Developing%') ORDER BY A.lastgigedit desc LIMIT 0,400.1460180.146018
0.1417371SELECT A.*, B.seo, B.name as categoryname, C.username, C.userlevel, C.lastlogin, C.ip, C.profilepicture FROM wanttobuy A, categories_wanttobuy B, seoclerks.members C WHERE A.active = 1 AND A.category = B.CATID AND A.USERID = C.USERID AND (A.tags LIKE '%Connection%' OR A.skills LIKE '%Connection%') ORDER BY A.lastgigedit desc LIMIT 0,400.1417370.141737
0.1147971SELECT COUNT(A.wantid) AS total FROM wanttobuy as A, categories_wanttobuy B, seoclerks.members C WHERE A.active = 1 AND A.category = B.CATID AND A.USERID = C.USERID AND (A.tags LIKE '%Connection%' OR A.skills LIKE '%Connection%')0.1147970.114797